我使用的是C#语言和Visual Studio 2013.我试图在我的网站上显示多行,但它只显示第一个结果
我正在尝试
String show = "Select Posts from userPosts where Username='John'";
SqlCommand com = new SqlCommand(show, con);
String str = com.ExecuteScalar().ToString();
Response.Write(str);
这仅显示用户名JOHN
的第一个结果,但我想要全部。
答案 0 :(得分:1)
这是因为您使用了ExecuteScalar()
尝试这样(结果显示在DataGridView
中):
String show = "Select Posts from userPosts where Username='John'";
SqlConnection con = new SqlConnection(connStr);
SqlDataAdapter da = new SqlDataAdapter(show,con);
DataSet ds = new DataSet();
da.Fill(ds,"tbl");
dataGridView1.DataSource = ds.Tables[0];
如果您不想在DataGridView
中展示并只是存储在变量中,请使用List<string>
,如下所示:
List<string> Posts = new List<string>();
foreach (DataRow item in ds.Tables[0].Rows)
{
Posts.Add(item[0].ToString());
}
您也可以使用SqlDataReader作为另一种选择。
答案 1 :(得分:0)
您正在使用ExecuteScalar
[执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。 ]
尝试ExecuteReader
。
String show = "Select Posts from userPosts where Username='John';
using (SqlCommand command = new SqlCommand(show, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
Console.WriteLine(reader.GetValue(i));
}
Console.WriteLine();
}
}
}
顺便说一下你可以试试像Dapper https://github.com/StackExchange/dapper-dot-net这样的轻型ORM。它真的很好地删除了这些可怕的while
循环
答案 2 :(得分:0)
ExecuteScalar() - 它执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
而不是ExecuteScalar使用ExecuteReader