Имейте в виду, что 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;
'.AddWithValue()' немного опасно - поскольку вы не указываете тип данных этого параметра, ADO.NET должен угадать от вашего значения то, что вы хотите. Это неплохая работа по угадыванию - но это все еще догадывается, и иногда эта догадка может быть ужасно отключена. Поэтому я бы всегда рекомендовал указать 'SqlDbType' для вашего' SqlParameter' и, следовательно, не использовать '.AddWithValue()' .... –
Я бы не сказал, что выяснение того, какой DbType используется AddWithValue, является догадкой, но это определенно не правильный инструмент для каждой ситуации.Я добавил ссылку на статью MSDN, в которой отображаются сопоставления типов данных с C# по SQL и добавлена информация о перегрузке .Add, которая позволит пользователю не вызвать вызов конструктора параметров самостоятельно. –