我有一個表接受一堆參數,並使用INSERT INTO語句通過存儲過程將其保存爲新聯繫人。出於某種原因,當我的某些參數留空時,我得到一個SqlException。在SQL Server表中,所有留空的參數都是可空的,所以我不理解這個問題。我的想法是,我的INSERT語句正在接受所有參數,即使它們爲空,並試圖將它們插入到我的表中,我相信它是一個語法「no-no」當我嘗試通過存儲過程插入空值時獲取SqlException
無論如何,這裏是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 ', 那是不供給的。
如何編輯我的存儲過程以使其與空值一起工作?
這工作。考慮到這很容易,我覺得很愚蠢。萬分感謝!! – Carson
這很好,它的工作:) –