0

这是我的存储过程:如何将默认值传递给storedprocedure中的日期参数 - 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 [email protected],[email protected],[email protected],[email protected],[email protected],[email protected] WHERE [email protected] 
    end 
    if(@i=3) 
    delete EMPLOYEE where [email protected] 
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; 

在这里,我所面临的问题:

未能参数值从字符串转换为a日期时间

代码:

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; 

如何通过默认值来存储过程?

+0

为什么你定义@pdoj日期=“1111年1月1日”。尝试使用pdoj date ='1111-01-01'。此外,我会建议使用datepicker而不是文本框 – DevelopmentIsMyPassion 2013-03-21 07:42:23

+0

@askreva,但问题出现在前端 – mahesh 2013-03-21 08:17:58

+0

你确定问题是在前端?我认为它打你的存储过程,这就是为什么返回你的错误。 – DevelopmentIsMyPassion 2013-03-21 08:36:45

回答

0

除了萨钦的回答,我会recomed你使用datepicker控制或验证文本框只接受使用验证器的日期值。

+0

Iam不会传递任何值txtdoj从前端它将作为空值自动 – mahesh 2013-03-21 08:28:19

+0

当我创建表doj数据类型是日期 – mahesh 2013-03-21 08:29:34

+0

@mahesh你的意思是你不会将任何值从前端传递到pdoj日期? – DevelopmentIsMyPassion 2013-03-21 08:38:08

0

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仅仅是你需要验证日期按照业务规则..枯萎考虑空日期为无效或允许默认日期是一个提示考虑。

+0

这是我的表 CREATE TABLE [DBO]。[EMPLOYEE]( \t [EMPID] [INT] IDENTITY(1,1)NOT NULL, \t [ENAME] [VARCHAR(20)NOT NULL, \t [ DESEGNATION] [VARCHAR(20)NOT NULL, \t [DOJ] [日期] NOT NULL, \t [SALARY] [货币] NULL, \t [DEPTID] [INT] NOT NULL, \t [LOCATIONID] [INT ] NOT NULL) – mahesh 2013-03-21 08:27:22

+0

和我的表数据类型是date..thenØ如何使用日期时间 – mahesh 2013-03-21 08:31:16

+0

离开司法部的SP和表日期,但更改数据类型为字符串代码:cmd.Parameters.Add(新的SqlParameter(“@ pdoj“,SqlDbType.String))。Value = txtdoj.Text; //但请确保文本框包含有效的日期。 – Munawar 2013-03-21 10:10:05

0

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

@Date Date = 'october 10, 2012'