尽管使用了查询字符串,但在使用sql COUNT时,ExecuteNonQuery返回-1

JDa*_*ila 3 c# sql sql-server ado.net executenonquery

出于某种原因,ExecuteNonQuery()在C#返回时-1,虽然当我单独运行查询时,该值返回所需的实际值.

例如:

try
{

    var connString ="Data Source=ServerName;InitialCatalog=DatabaseName;Integrated Security=true;"
    SqlConnection conn = new SqlConnection(connString);

    SqlCommand someCmd = new SqlCommand("SELECT COUNT(*) FROM SomeTable");

    someCmd.Connection = conn;

    conn.Open();

    var theCount = cmd.ExecuteNonQuery();

    conn.Close();
}
catch(Exception ex)
{
    Console.WriteLine(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

执行命令时返回-1.虽然如果单独运行查询,

SELECT COUNT(*) FROM SomeTable;
Run Code Online (Sandbox Code Playgroud)

4如果要查询的表具有4行,则列返回一行,其计数为count .

Sal*_*ari 9

基于MSDN:

对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数.当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数.对于所有其他类型的语句,返回值为-1.如果发生回滚,则返回值也为-1.

您希望返回受命令影响的行数并将其保存到int变量,但由于语句的类型是select返回的-1.

解决方案:如果要获取受SELECT命令影响的行数并将其保存到int变量,则可以使用ExecuteScalar.

var theCount = (int)cmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)