2012-06-15 6 views
0

Мне нужно вызвать хранимую процедуру, но у меня есть больше параметров, есть ли простой способ сделать это? или просто добавление каждого параметра в класс sqlparameter? как показано нижеДобавление большего количества параметров в класс sqlparameter

SqlCommand command = new SqlCommand("inserting", con); 
command.CommandType = CommandType.StoredProcedure; 
command.Parameters.Add(new SqlParameter("@Firstname", SqlDbType.NVarChar).Value = TextBox1.Text; 

ответ

7

Имейте в виду, что Paramters.Add имеет overload, который принимает в строке и DbType, так что вы не должны вызывать конструктор параметров. Вы могли бы заменить линию вы используете, чтобы добавить новый параметр:

command.Parameters.Add(new SqlParameter("@Firstname", SqlDbType.NVarChar)).Value = TextBox1.Text; 

со следующей короткой (но функционально эквивалентной) линией:

command.Parameters.Add("@Firstname", SqlDbType.NVarChar).Value = TextBox1.Text; 

Если вы хотите добавить больше параметров, вы бы просто добавить их в Parameters свойство вашей команды, например, так:

SqlCommand command = new SqlCommand("inserting", con); 
command.CommandType = CommandType.StoredProcedure; 
command.Parameters.Add("@Firstname", SqlDbType.NVarChar).Value = TextBox1.Text; 
command.Parameters.Add("@Lastname", SqlDbType.NVarChar).Value = TextBox2.Text; 

Помимо этого, ч вы пытались использовать Parameters.AddWithValue? Вы можете использовать это, если тип данных вашего столбца соответствует типу вашего значения в C#. Вы можете найти сопоставление данных C# с SQL Server typse here.

Вы могли бы использовать его так:

// Assume your sproc has a parameter named @Age that is a SqlInt32 type 
int age = 5; 
// Since age is a C# int (Int32), AddWithValue will automatically set 
// the DbType of our new paramter to SqlInt32. 
command.Parameters.AddWithValue("@Age", 5); 

Если вам необходимо указать SqlDbType, AddWithValue возвращает параметр, который вы только что добавили, так что это так же просто, как добавление дополнительного заявления, чтобы установить DbType property в конце , хотя на данный момент вам лучше просто использовать оригинальную функцию .Add и установить значение.

command.Parameters.AddWithValue("@Firstname", TextBox1.Text).DbType = SqlDbType.NVarChar; 
+0

'.AddWithValue()' немного опасно - поскольку вы не указываете тип данных этого параметра, ADO.NET должен угадать от вашего значения то, что вы хотите. Это неплохая работа по угадыванию - но это все еще догадывается, и иногда эта догадка может быть ужасно отключена. Поэтому я бы всегда рекомендовал указать 'SqlDbType' для вашего' SqlParameter' и, следовательно, не использовать '.AddWithValue()' .... –

+0

Я бы не сказал, что выяснение того, какой DbType используется AddWithValue, является догадкой, но это определенно не правильный инструмент для каждой ситуации.Я добавил ссылку на статью MSDN, в которой отображаются сопоставления типов данных с C# по SQL и добавлена ​​информация о перегрузке .Add, которая позволит пользователю не вызвать вызов конструктора параметров самостоятельно. –

0

Вы можете использовать dapper-dot-net

пример кода:

var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid }); 

Вставить пример:

connection.Execute(@"insert MyTable(colA, colB) values (@a, @b)", 
    new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } } 
).IsEqualTo(3); // 3 rows inserted: "1,1", "2,2" and "3,3" 
2

Используйте массив типа SqlParameter и вставить, что в SqlCommand

SqlCommand Comm = new SqlCommand("Command text", new SqlConnection("Connection String"); 
SqlParameter[] param = {new SqlParameter("@Name","Value"), 
         new SqlParameter("@Name","Value"), 
         ........ 
         }; 
Comm.Parameters.AddRange(param); 
+0

Что такое значение здесь? Вы имеете в виду значение текстового поля? – user1435482

+0

yup. Значения, которые нужно вставить в Db, например Name, City, Age и т. Д. –

1

Просто позвоните на command.Parameters.Add метод несколько раз:

SqlCommand command = new SqlCommand("inserting", con); 
command.CommandType = CommandType.StoredProcedure; 

command.Parameters.Add("@Firstname", SqlDbType.NVarChar, 100).Value = TextBox1.Text; 
command.Parameters.Add("@Lastname", SqlDbType.NVarChar, 100).Value = TextBox2.Text; 
command.Parameters.Add("@City", SqlDbType.NVarChar, 100).Value = TextBox3.Text; 
command.Parameters.Add("@ID", SqlDbType.Int).Value = Convert.ToInt32(TextBox4.Text); 
....... and so on ..... 
+0

ya Я делаю это только, но я спрашиваю, есть ли какой-нибудь простой способ сделать это или это единственный способ? так как у меня есть больше параметров для прохождения ..... – user1435482

0

command.Parameters.Add устарела. Скорее используйте command.Parameters.AddWithValue. Для этого вы бы назвали это много раз для каждого параметра.

0
// Mention size of the nvarchar column , here i give 500 , you can use its length for @Firstname as you mention in database according to your database 

    SqlCommand command = new SqlCommand("inserting", con); 
command.CommandType = CommandType.StoredProcedure; 
command.Parameters.Add(new SqlParameter("@Firstname", SqlDbType.NVarChar,500).Value = TextBox1.Text; 
Смежные вопросы