这是我的代码:
private void loadlist()
{
comboBox1.Items.Clear();
cn.Open();
cmd.CommandText = "Select * from info";
dr = cmd.ExecuteNonQuery();
if (dr.HasRows)
{
while (dr.Read())
{
comboBox1.Items.Add(dr[0].ToString());
}
cn.Close();
}
}
此行发生错误:
dr = cmd.ExecuteNonQuery();
我正在使用System.Data.SqlClient;
和
SqlConnection cn = new SqlConnection(@"//HERE IS MY STRING CONNECTION");
SqlCommand cmd = new SqlCommand();
SqlDataReader dr;
答案 0 :(得分:9)
这是SqlDataReader
的正确代码:
dr = cmd.ExecuteReader();
ExecuteNonQuery()
仅用于(惊讶,惊讶) not 查询的内容,即不返回数据的SQL命令(如UPDATE和DELETE)。
您还需要为该命令分配连接。
cmd.Connection = cn;
cn.Open();
您还应该记得在完成后关闭阅读器和连接。或使用using
块
答案 1 :(得分:1)
ExecuteNonQuery对连接执行Transact-SQL语句并返回受影响的行数,例如UPDATE,INSERT或DELETE请参阅MSDN
您可以使用
ExecuteReader();
上的更多文档
答案 2 :(得分:1)
您应该使用SqlDataReader
和ExecuteReader
方法从select语句中读取数据行。例如:
private static void ReadOrderData(string connectionString)
{
string queryString =
"SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlCommand command =
new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
// Call Close when done reading.
reader.Close();
}
}
答案 3 :(得分:1)
的的ExecuteNonQuery 强> 的
ExecuteNonQuery方法将返回使用INSERT,DELETE或UPDATE操作影响的行数。此ExecuteNonQuery方法仅用于插入,更新和删除,创建和SET语句。
的的ExecuteScalar 强> 的
执行Scalar将在使用命令对象执行SQL查询或存储过程时返回单行单列值,即单值。从数据库中检索单个值非常快。
的的ExecuteReader 强> 的
使用命令对象执行SQL查询或存储过程时,将使用Execute Reader返回行集。这个是仅向前检索记录,它用于从头到尾读取表值。
在您的情况下dr = cmd.ExecuteNonQuery();
dr
为IdataReader(DataReader)
,因此您无法使用ExecuteNonQuery
.....而不是使用此ExecuteReader
答案 4 :(得分:0)
使用cmd.ExecuteReader()
代替cmd.ExecuteNonQuery()
答案 5 :(得分:0)
试试这段代码,一切都会好的。
private void loadlist()
{
comboBox1.Items.Clear();
cn.Open();
cmd.CommandText = "Select * from info";
dr = cmd.ExecuteReader()
while (dr.Read())
{
comboBox1.Items.Add(dr.GetString(0));
}
cn.Close();
}