首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我试图通过存储过程插入空值时获取SqlException

当我试图通过存储过程插入空值时获取SqlException
EN

Stack Overflow用户
提问于 2013-08-28 21:57:49
回答 3查看 1.6K关注 0票数 1

我有一个表,它接受一组参数,并通过使用INSERT INTO语句的存储过程将其保存为新的联系人。由于某些原因,当我的一些参数被保留为空时,我会得到一个SqlException。在Server表中,剩下的所有参数都是可空的,因此我不理解这个问题。我的想法是,我的INSERT语句接受所有参数,即使它们为null,并试图将它们插入到我的表中,我认为这是一个语法"no-no“。

总之,下面是C#代码:

代码语言:javascript
复制
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中的存储过程:

代码语言:javascript
复制
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”处理,该参数未提供。

如何编辑存储的proc以使其使用空值?

EN

Stack Overflow用户

回答已采纳

发布于 2013-08-28 22:01:29

将参数的默认值设置为null,尝试如下:

代码语言:javascript
复制
@CompanyID  INT,
@email      VARCHAR(50) = null,
@phone      VARCHAR(50)  = null,
@fax        VARCHAR(50)  = null,
@fName      VARCHAR(50) = null,
@lName      VARCHAR(50),
@sendVia    VARCHAR(50),
@default    BIT,
@repo       TINYINT,
@fail       TINYINT,
@borrow     TINYINT,
@loan       TINYINT
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18498910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档