복붙노트

[SQL] ExecuteNonQuery는이 반환 -1 쿼리 문자열에도 불구하고 SQL COUNT를 사용하는 경우

SQL

ExecuteNonQuery는이 반환 -1 쿼리 문자열에도 불구하고 SQL COUNT를 사용하는 경우

내가 따로 쿼리를 실행할 때 비록 C #을 반환에 어떤 이유로, ExecuteNonQuery는 ()가 -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);
}

명령이 실행되면는 -1을 돌려줍니다. 개별적으로 쿼리를 실행하면 비록,

SELECT COUNT(*) FROM SomeTable;

조회되는 해당 테이블이 4 개 행이있는 경우 열 4의 수 하나 개의 행을 반환합니다.

해결법

  1. ==============================

    1.MSDN을 바탕으로 :

    MSDN을 바탕으로 :

    당신은 INT 변수에 명령에 의해 영향을받는 행의 수와 그 저장을 반환하고 싶지만 구문의 유형이기 때문에 그것을 반환 있도록 -1 선택합니다.

    해결 방법 : 당신이 ExecuteScalar는 사용할 수있는 int 변수에 SELECT 명령에 의해 영향을받는 행의 수와 그 저장을 얻고 싶다면.

    var theCount = (int)cmd.ExecuteScalar();
    
  2. ==============================

    2.이 예제와 Ado.net와 Ef는 코어를 사용할 수 있습니다

    이 예제와 Ado.net와 Ef는 코어를 사용할 수 있습니다

    var context = new SampleDbContext();
    using (var connection = context.Database.GetDbConnection())
    {
        connection.Open();
    
        using (var command = connection.CreateCommand())
        {
            command.CommandText = "SELECT COUNT(*) FROM SomeTable";
            var result = command.ExecuteScalar().ToString();
        }
    }
    
  3. from https://stackoverflow.com/questions/38060489/executenonquery-returning-1-when-using-sql-count-despite-the-query-string by cc-by-sa and MIT license