如何在存储过程中传递默认值到日期参数- Sqlserver 2008

本文关键字:日期 参数 2008 Sqlserver 默认值 存储 存储过程 过程中 | 更新日期: 2023-09-27 18:04:55

这是我的存储过程:

ALTER proc [dbo].[allrecp]
    @peid int=0,
    @pename varchar(20)='',
    @pdes varchar(20)='',
    @pdoj date='1111-1-1',
    @sal money=0,
    @dept int=0,
    @loc int=0,@i int=0
    as begin
    if(@i=1)
    begin
    insert into Employee values(@pename,@pdes,@pdoj,@sal,@dept,@loc)
    end
    if(@i=2)
    begin
    update Employee set ENAME=@pename,DESEGNATION=@pdes,DOJ=@pdoj,SALARY=@sal,DEPTID=@dept,LOCATIONID=@loc WHERE EMPID=@peid
    end
    if(@i=3)
    delete EMPLOYEE where EMPID=@peid
end

我的c#代码是:

private void btndelete_Click(object sender, EventArgs e)
{
    parameteres(3);
}
private void btnupdate_Click(object sender, EventArgs e)
{
    parameteres(2);
}
private void BTNINSERT_Click(object sender, EventArgs e)
{
    parameteres(1);
}
public void parameteres(int i)
{
    cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "allrecp";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@peid", SqlDbType.Int)).Value = txtempid.Text;
    cmd.Parameters.Add(new SqlParameter("@pename", SqlDbType.VarChar, 20)).Value = txtename.Text;
    cmd.Parameters.Add(new SqlParameter("@pdes", SqlDbType.VarChar, 20)).Value = txtdesg.Text;
    cmd.Parameters.Add(new SqlParameter("@pdoj", SqlDbType.Date)).Value = txtdoj.Text;

我现在面临的问题是:

将参数值从字符串转换为日期时间失败

代码:

cmd.Parameters.Add(new SqlParameter("@dept", SqlDbType.Int)).Value = txtdept.Text;
cmd.Parameters.Add(new SqlParameter("@sal", SqlDbType.Money)).Value = txtsal.Text;
cmd.Parameters.Add(new SqlParameter("@loc", SqlDbType.Int)).Value = txtlocation.Text;
cmd.Parameters.Add(new SqlParameter("@i", SqlDbType.Int)).Value = i;
con.Open();
int x = cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show(x + " rows effected");

在这里我面对的问题:

cmd.Parameters.Add(new SqlParameter("@dept", SqlDbType.Int)).Value = txtdept.Text;

如何传递默认值到存储过程?

如何在存储过程中传递默认值到日期参数- Sqlserver 2008

除了sachin的回答,我还建议您使用日期选择器控件或验证文本框,以便只接受使用验证器的日期值

1-如何传递默认日期值:

SP内部的一个具有默认值的参数使其成为可选的。你可以在SP内部为参数设置一个默认值,并且在从代码调用SP时根本不传递该参数,这样它就会考虑你的默认值。

在你的SP

@pdoj date='1111-1-1' -- Make sure to use a valid date. The min valid date for SQL server is `1753-1-1`

是一个可选参数,当你在UI中没有任何可用的值时,那么在调用SP时不要传递该参数,因此它将考虑默认值。

2-确保不传递空字符串/无效日期,而是在用户没有输入日期时绕过添加日期参数或根据您的业务规则验证它

所以,添加日期参数应该有条件地添加,就像这样:

if(  IsValidDate(txtdoj.Text) )
{
cmd.Parameters.Add(new SqlParameter("@pdoj", SqlDbType.Date)).Value = Convert.ToDateTime(txtdoj.Text);
}

//* IsValidDate只是一个提示,您需要根据业务规则验证日期。不允许将空日期视为无效或允许考虑默认日期。

日期类型的默认参数设置如下:

@Date Date = 'october 10, 2012'