Как передать параметры int в SQL commandText

Как передать целое значение, например параметры команды SQL?

Я делаю так:

cmd.CommandText = ("insert_questions '" + 
cmd.Parameters.AddWithValue(store_result,store_result) + "','" + 
cmd.Parameters.AddWithValue(store_title, store_title) + "', '" + 
cmd.Parameters.AddWithValue(store_des, store_des) + "'");

store_result - это int, а другие 2 параметра-строковый тип.

store_result дает сообщение об ошибке, как показано ниже.

Аргумент 1: не удается преобразовать из 'int'в ' string'

в SP есть другая переменная типа int, которая получит значение store_result.

Как правильно синтаксис для передачи параметров int?

спасибо.

4 ответов


это должно быть так,

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = ("insert_questions") ;
cmd.Parameters.AddWithValue("@value", valueHere);
cmd.Parameters.AddWithValue("@value2", valueHere);

отметим, что @value и @value2 параметры в хранимую процедуру.


правильный путь -

using(var connection = new SqlConnection(ConnectionString))
{
    connection.Open();
    using(var command = new SqlCommand("SELECT * FROM Table WHERE ID=@someID",connection))
    {
        command.Parameters.AddWithValue("someID",1234);
        var r = command.ExecuteQuery();
    }
}

это означает, что он работает даже с текстом запросов. еще проще с хранимыми процедурами-вместо sql-запроса вы просто предоставляете имя хранимой процедуры:

using(var connection = new SqlConnection(ConnectionString))
{
    connection.Open();
    using(var command = new SqlCommand("insert_sproc",connection))
    {
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddWithValue("someID",1234);
        var r = command.ExecuteQuery();
    }
}

попробуйте это:

        cmd.CommandText = ("insert_questions @store_result, @store_title, @store_des");
        cmd.Parameters.AddWithValue("@store_result", store_result);
        cmd.Parameters.AddWithValue("@store_title", store_title);
        cmd.Parameters.AddWithValue("@store_des", store_des);

вы не объединяете экземпляры sqlparameter; вместо этого:

cmd.CommandText = "insert_questions @store_result, @store_title, @store_des";
cmd.Parameters.AddWithValue("store_result", store_result);
cmd.Parameters.AddWithValue("store_title", store_title);
cmd.Parameters.AddWithValue("store_des", store_des);

имена, используемые в AddWithValue используются в TSQL как @store_result, etc.

если предположить, что inert_questions на самом деле proc, то это еще проще:

cmd.CommandText = "insert_questions";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("store_result", store_result);
cmd.Parameters.AddWithValue("store_title", store_title);
cmd.Parameters.AddWithValue("store_des", store_des);

альтернативно, если все это кажется утомительным, такие инструменты, как dapper-dot-net, облегчают это:

someOpenConnection.Execute("insert_questions",    
      new { store_result, store_title, store_des },
      commandType: CommandType.StoredProcedure);