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'