我刚刚开始学习C#,我可以毫无问题地将数据写入数据库。但是我在阅读方面遇到了问题,SQL执行得很好但是我遇到了存储问题。我如何存储应返回的四列,然后将它们显示为消息框?感谢。
SqlCommand myCommand = new SqlCommand("select * from Requests where Complete = 0", myConnection);
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
Console.WriteLine(myReader["Username"].ToString());
Console.WriteLine(myReader["Item"].ToString());
Console.WriteLine(myReader["Amount"].ToString());
Console.WriteLine(myReader["Complete"].ToString());
答案 0 :(得分:29)
一个问题是在while之后缺少大括号
while (myReader.Read())
{ // <<- here
Console.WriteLine(myReader["Username"].ToString());
Console.WriteLine(myReader["Item"].ToString());
Console.WriteLine(myReader["Amount"].ToString());
Console.WriteLine(myReader["Complete"].ToString());
} // <<- here
如果你跳过大括号,只会在每个循环中处理第一行,其余的将在循环后处理,然后myReader
超过最后一行。
答案 1 :(得分:20)
不要忘记使用using(){}
块:
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand("select * from Requests where Complete = 0", connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader["Username"].ToString());
Console.WriteLine(reader["Item"].ToString());
Console.WriteLine(reader["Amount"].ToString());
Console.WriteLine(reader["Complete"].ToString());
}
}
}
答案 2 :(得分:6)
就个人而言,我会编写一个包含4个属性(具有匹配的名称和类型)的类,然后使用“dapper”(http://code.google.com/p/dapper-dot-net/):
var data = connection.Query<Request>(
"select * from Requests where Complete = 0").ToList();
有类似的东西:
public class Request {
public string Username{get;set;}
...
public bool Complete {get;set;}
}
Dapper是免费的,简单的,具有参数化以避免SQL注入,并且速度非常快。
答案 3 :(得分:0)
我会创建一个具有保存这些值的属性的对象,然后根据需要传递该对象。
public class YourObjectName
{
public string Username { get; set; }
public string Item { get; set; }
public string Amount { get; set; }
public string Complete { get; set; }
}
YourObjectName a = new YourObjectName();
a.Username = Reader['Username'].ToString();
答案 4 :(得分:0)
我知道它有点晚但你可以使用本地字符串变量,或字符串数组或列表插入数据库中的数据然后在你的控制台写行中调用它