提问人:lYriCAlsSH 提问时间:3/23/2010 最后编辑:Marc GravelllYriCAlsSH 更新时间:3/29/2010 访问量:541
使用 C 从 db 获取列信息#
Getting column info from db with C#
问:
在PHP中,我能够像这样从数据库中检索信息:
<?php
$sql = "SELECT * FROM users";
$result = mysql_query($sql);
$data = array();
while($row = mysql_fetch_assoc($result))
{
$data[] = $row;
}
我正在尝试在 C# 中完成同样的事情:
OdbcCommand cmd = new OdbcCommand("SELECT * FROM users WHERE id = @id");
cmd.Parameters.Add("@id", id);
OdbcDataReader reader = cmd.ExecuteReader();
Dictionary<string, string> data = new Dictionary<string, string>();
while (reader.Read())
{
data.Add("id", reader.GetString(0));
data.Add("username", reader.GetString(1));
data.Add("firstName", reader.GetString(2));
}
return data;
是否可以在不经历所有这些麻烦的情况下按名称引用表中的列?
答:
0赞
Dean Harding
3/23/2010
#1
您可以使用 OdbcDataAdapter 类来填充 ,这可能会更简单一些。DataSet
评论
0赞
UnkwnTech
3/23/2010
您能举例说明如何使用它吗?
0赞
TomTom
3/23/2010
效率也低了很多。-1 实际上推荐了像 DataAdapter 这样愚蠢的东西,全世界都转向了高效的 DAL。
0赞
lYriCAlsSH
3/23/2010
就像Unkwntech问的那样,你能举个例子吗?我有点困惑。
-1赞
TomTom
3/23/2010
#2
是的,但它很慢。当然,不比你的方法慢,但很慢 - 我会标记你的整个代码进行审查......
- 不要问“*”,要问字段。良好的 SQL 实践 - 正如您知道字段一样,您猜怎么着,您不必猜测它们。在顶部,您假设 id 为 fiel 0,用户名字段为 1...
如果这是不可能的 - 阅读 docomentation。有一个“GetOrdinal”方法,它采用字段名称和...。返回。。。。字段索引。
也就是说,整个代码是完全冗余的。看看适当的数据访问层,或者至少是 BLTOOLKIT - 您可以将所有这些代码移动到一个抽象方法中,其余的则自动生成。
评论
0赞
UnkwnTech
3/23/2010
我认为可以安全地假设 SELECT * 可能只是示例代码。此外,我认为可以肯定的是,并非每个看过文档的人都看到了所有内容。
0赞
TomTom
3/23/2010
不,但是当你寻找某物时,看两次文档是常识。那些日子太迷茫了。
评论