将新参数添加到存储过程

Vah*_*ron 3 c# sql sql-server-2005

我的数据库中有一个存储过程,当前接收并使用了11个参数(一切正常).我需要为我添加的新列添加一个新参数.

我们总是在代码中明确定义列,因此在表的末尾添加列没有问题.但是,如果我在我的存储过程中添加一个新参数来填充这个新列,如果它没有提供,它会将错误返回给我的C#代码,还是默认为参数的null(或其他值) ?

示例C#代码调用存储过程:

public static void InsertMailLog(string messageId, DateTime sentOrReceivedDate,
        string fromAddress, string toAddress, string subject, string receivedMessage, string tailNumber,
        string messageType, string direction, string sentOrReceived, string distributionList, ILogger AppEventLog, string filename = null)
{
        List<string> lstParameterValues = new List<string>();

        try
        {
            lstParameterValues.Add(messageId ?? "");
            lstParameterValues.Add(sentOrReceivedDate.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            lstParameterValues.Add(fromAddress ?? "");
            lstParameterValues.Add(toAddress);
            lstParameterValues.Add(subject ?? "");
            lstParameterValues.Add(receivedMessage ?? "");
            lstParameterValues.Add(tailNumber ?? "");
            lstParameterValues.Add(messageType ?? "");
            lstParameterValues.Add(direction ?? "");
            lstParameterValues.Add(sentOrReceived ?? "");
            lstParameterValues.Add(distributionList ?? "");
            lstParameterValues.Add(filename ?? "");  //THIS IS NEW, but it has not been published yet as the SP hasn't been updated.

            CommonDAL.ExecSpNonQuery("spMailLogInsert", lstParameterValues);
        }
        catch (Exception ex)
        {
            CommonBLL.LogError(ex, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, "Error", messageId, tailNumber, messageType, "", Settings.Default.ContentProvider, AppEventLog);
        }
    }
Run Code Online (Sandbox Code Playgroud)

示例存储过程代码:

ALTER PROCEDURE [dbo].[spMailLogInsert]
    @SdMessageId         varchar(50),
    @SentOrReceivedDate  datetime,
    @FromAddress         varchar(100),
    @ToAddress           varchar(100),
    @Subject             varchar(255),
    @Message             varchar(MAX),
    @TailNumber          varchar(50),   
    @MessageType         varchar(50),
    @Direction           varchar(50),
    @SentOrReceived      varchar(50),
    @DistributionList    varchar(50),
    @Filename            varchar(50)  --THIS IS NEW
AS
    SET NOCOUNT ON

    INSERT MailLog (SdMessageId, SentOrReceivedDate, FromAddress, ToAddress,
                    [Subject], [Message], TailNumber, MessageType, Direction,
                    SentOrReceived, DistributionList, Filename  --THIS IS NEW
                   ) 
    VALUES (@SdMessageId, @SentOrReceivedDate, @FromAddress, @ToAddress,
            @Subject, @Message, @TailNumber, @MessageType,
            @Direction, @SentOrReceived, @DistributionList,
            @Filename  --THIS IS NEW
           )
Run Code Online (Sandbox Code Playgroud)

我完全理解这是对存储过程的可怕使用.我应该使用Entity Framework,但它已经编写了,我有一个项目来更新整个项目以便在以后的DAL中使用EF(这是非常古老的代码).

我的问题是,如果我在上面的新C#代码发布之前将新参数@Filename" 添加到存储过程中,我是否会收到错误,或者存储过程参数是否默认为NULL?或者,如果有人有更好的方法默认这是NULL或空字符串,如果没有提供,我都是耳朵.

Cod*_*bia 9

要么让它像这样可以为空.

    ALTER PROCEDURE [dbo].[spMailLogInsert]
    @SdMessageId         varchar(50),
    @SentOrReceivedDate  datetime,
    @FromAddress         varchar(100),
    @ToAddress           varchar(100),
    @Subject             varchar(255),
    @Message             varchar(MAX),
    @TailNumber          varchar(50),   
    @MessageType         varchar(50),
    @Direction           varchar(50),
    @SentOrReceived      varchar(50),
    @DistributionList    varchar(50),
    @Filename            varchar(50) = NULL --THIS IS NEW
......
Run Code Online (Sandbox Code Playgroud)

或者像这样添加默认值:

    ALTER PROCEDURE [dbo].[spMailLogInsert]
    @SdMessageId         varchar(50),
    @SentOrReceivedDate  datetime,
    @FromAddress         varchar(100),
    @ToAddress           varchar(100),
    @Subject             varchar(255),
    @Message             varchar(MAX),
    @TailNumber          varchar(50),   
    @MessageType         varchar(50),
    @Direction           varchar(50),
    @SentOrReceived      varchar(50),
    @DistributionList    varchar(50),
    @Filename            varchar(50) = 'abc.txt' --THIS IS NEW
......
Run Code Online (Sandbox Code Playgroud)