Как передать параметры 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);