一連のパラメーターを受け入れ、INSERT INTO ステートメントを使用してストアド プロシージャを介して新しい連絡先として保存するテーブルがあります。何らかの理由で、一部のパラメーターが null のままになっていると、SqlException が発生します。null のままのパラメーターはすべて、SQL Server テーブルで実際に null 可能であるため、問題がわかりません。私の考えでは、INSERT ステートメントは、たとえ null であってもすべてのパラメーターを受け入れ、それらをテーブルに挿入しようとしています。
とにかく、ここに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 が奇妙である理由はわかりませんが、Stored Proc では正しいです。
とにかく、アプリケーションで電子メール、電話、ファックスなどを空のままにしておくと、次のエラーが発生します。
SqlException はユーザー コードによって処理されませんでした プロシージャまたは関数 'Insert_NewContact' は、指定されていないパラメーター '@email' を予期しています。
ストアド プロシージャを編集して null 値で動作させるにはどうすればよいですか?