我正在尝试在我的 C# 代码中运行 SQL Select 查询。但我总是在
上得到 -1 输出int result = command.ExecuteNonQuery();
但是,如果我将同一张表用于delete
或 insert
则可以...
ConnectString
也可以。
请检查下面的代码
SqlConnection conn = new SqlConnection("Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password=");
conn.Open();
SqlCommand command = new SqlCommand("Select id from [table1] where name=@zip", conn);
//command.Parameters.AddWithValue("@zip","india");
int result = command.ExecuteNonQuery();
// result gives the -1 output.. but on insert its 1
using (SqlDataReader reader = command.ExecuteReader())
{
// iterate your results here
Console.WriteLine(String.Format("{0}",reader["id"]));
}
conn.Close();
查询在 SQL Server 上运行良好,但我不明白为什么只有选择查询不起作用。
所有其他查询均有效。
最佳答案
SqlCommand.ExecuteNonQuery 方法
您可以使用 ExecuteNonQuery 执行目录操作(例如,查询数据库的结构或创建数据库对象(如表)),或者通过执行 UPDATE、INSERT 或删除语句。 尽管 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都填充有数据。 对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也是-1。
SqlCommand.ExecuteScalar 方法 对连接执行 Transact-SQL 语句并返回受影响的行数。
所以没有。 SELECT 语句返回的语句数量,您必须使用 ExecuteScalar 方法。
所以试试下面的代码:
SqlConnection conn = new SqlConnection("Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password=");
conn.Open();
SqlCommand command = new SqlCommand("Select id from [table1] where name=@zip", conn);
command.Parameters.AddWithValue("@zip","india");
// int result = command.ExecuteNonQuery();
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
Console.WriteLine(String.Format("{0}",reader["id"]));
}
}
conn.Close();
关于c# - 选择查询以从 SQL Server 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25739788/