如何在defaultprocedure中将默认值传递给日期参数 – Sqlserver 2008?

这是我的存储过程:

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; 

我在这里遇到了问题:

无法将参数值从String转换为DateTime

码:

 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; 

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

除了sachin的答案,我还会重新使用datepicker控件或validation文本框只能使用validation器接受日期值。

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

SP内部的参数(默认值)使其成为可选参数。 您可以在SP中为参数设置默认值,并且在从代码调用SP时根本不通过parmeter,这样就会考虑您的默认值。

在你的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-确保不要传递空字符串/无效日期,只是在用户未输入日期时绕过添加日期参数或根据业务规则validation它

因此,应该有条件地添加日期参数,如下所示:

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

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

您可以设置日期类型的默认参数,如下所示:

 @Date Date = 'october 10, 2012'