У меня есть таблица, которая принимает кучу параметров и сохраняет ее как новый контакт через хранимую процедуру с помощью оператора INSERT INTO. По какой-то причине я получаю SqlException, когда некоторые из моих параметров остаются нулевыми. Все параметры, оставленные равными нулю, действительно допускают значение NULL в таблице SQL Server, поэтому я не понимаю, в чем проблема. Я думаю, что мой оператор INSERT принимает все параметры, даже если они равны нулю, и пытается вставить их в мою таблицу, что, как я считаю, является синтаксическим «нет-нет»
Во всяком случае, вот код C #:
try
{
using (SqlConnection sqlConn = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand("Insert_NewContact", sqlConn))
{
sqlConn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CompanyID", CompanyID);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@phone", phone);
cmd.Parameters.AddWithValue("@fax", fax);
cmd.Parameters.AddWithValue("@fName", fName);
cmd.Parameters.AddWithValue("@lName", lName);
cmd.Parameters.AddWithValue("@sendVia", sendVia);
cmd.Parameters.AddWithValue("@default", defaultContact);
cmd.Parameters.AddWithValue("@repo", repo);
cmd.Parameters.AddWithValue("@fail", fail);
cmd.Parameters.AddWithValue("@borrow", borrow);
cmd.Parameters.AddWithValue("@loan", loan);
cmd.ExecuteNonQuery();
sqlConn.Close();
}
}
}
catch (Exception e)
{
throw e;
}
а вот хранимая процедура в SQL:
ALTER PROCEDURE [dbo].[Insert_NewContact]
@CompanyID INT,
@email VARCHAR(50),
@phone VARCHAR(50),
@fax VARCHAR(50),
@fName VARCHAR(50),
@lName VARCHAR(50),
@sendVia VARCHAR(50),
@default BIT,
@repo TINYINT,
@fail TINYINT,
@borrow TINYINT,
@loan TINYINT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
INSERT INTO Master_Contacts(
companyID,
fName,
lName,
phone,
email,
fax,
send_via,
defaultcontact,
repoRole,
borrowRole,
failRole,
loanRole
)
VALUES (
@CompanyID,
@fName,
@lName,
@phone,
@email,
@fax,
@sendVia,
@default,
@repo,
@borrow,
@fail,
@loan
)
END TRY
Не уверен, почему AS BEGIN и NOCOUNT такие странные, но они верны в сохраненной процедуре.
В любом случае, если я оставлю адрес электронной почты, телефон, факс и т. Д. Пустыми в своем приложении, я получаю такую ошибку:
SqlException не было обработано пользовательским кодом. Процедура или функция Insert_NewContact ожидает параметр @email, который не был предоставлен.
Как я могу отредактировать сохраненную процедуру, чтобы она работала с нулевыми значениями?