2016-12-05 172 views
0

我有三列C#和SQL Server - 使用存儲過程

Fraquence int 
[Prochain étalonnag] date  
[date étalonnage] type:date 

在Visual Studio中,我有添加新的(etalonnage),以我的表的用戶輸入的兩個vules(Fraquencedate étalonnage形式)。

我想在SQL Server存儲過程來做到這一點:

Prochain étalonnag = date étalonnage + (Month Fraquence). 

Prochain étalonnage將被自動填寫,當用戶點擊按鈕Add

+1

你嘗試過這麼遠嗎?請提供示例代碼 - 有關更多信息,請閱讀[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve) –

+0

我知道這個方法System.DateTime.Now.AddMonths( ).ToShortDateString();但我不想要今天的日期,我不知道在這個例子中我是如何的 –

回答

0

請檢查下面的.NET代碼,很抱歉它是在VB.NET 但它不是將其轉換爲C#

在數據庫中的存儲過程被命名爲prAddRow這個樣本 一個問題它有兩個參數@p_int和@p_date

Dim sqlConnBuilder As New SqlConnectionStringBuilder() 
sqlConnBuilder.DataSource = txtSQLServer.Text 
sqlConnBuilder.InitialCatalog = txtDatabase.Text 
sqlConnBuilder.IntegratedSecurity = True 

conn = New SqlConnection(sqlConnBuilder.ToString) 

Dim cmd As New SqlCommand("prAddRow") 
cmd.CommandType = CommandType.StoredProcedure 
cmd.Parameters.Add("@p_int", SqlDbType.Int).Value = 1 
cmd.Parameters.Add("@p_date", SqlDbType.Date).Value = Date.Now.Date 

conn.Open() 
cmd.Connection = conn 
Dim numberOfAffectedRows As Integer = cmd.ExecuteNonQuery() 
conn.Close() 

用於樣品存儲過程T-SQL源代碼被如下

create procedure prAddRow(
    @p_int int, 
    @p_date date 
) 
as 
insert into etalonnage (Fraquence , [date etalonnage]) values (@p_int, @p_date) 
go 

注:我根據從sp_addRow Marc的音符prAddRow

我希望這是給你的

+1

備註:你應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並使用別的東西作爲前綴 - 或者根本沒有前綴! –

+0

感謝您提供有關命名存儲過程的警告和信息 – Eralper

+1

另一方面:使用DateTime.Today或Date.Today代替'.Now.Date' –

0
private void button1_Click(object sender, EventArgs e) 
    { 
     cmd = new SqlCommand("INSERTNEW", connection); 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlParameter [] par = new SqlParameter[4]; 
     par[0] = new SqlParameter("@COD", SqlDbType.VarChar, 50); 
     par[0].Value = textBox1.Text; 
     par[1] = new SqlParameter("@FERQ", SqlDbType.Int); 
     par[1].Value = numericUpDown1.TextAlign; 
     par[2] = new SqlParameter("@DATE_ET", SqlDbType.Date); 
     par[2].Value = dateTimePicker1.Text; 
     par[3] = new SqlParameter("@DATE_PROC", SqlDbType.Date); 
     DateTime d1 = Convert.ToDateTime(dateTimePicker1.Text); 
     int k =Convert.ToInt32(numericUpDown1.TextAlign); 
     string r = d1.AddMonths(k).ToShortDateString(); 
     par[3].Value = r ; 
     cmd.Parameters.AddRange(par); 
     connection.Open(); 
     cmd.ExecuteNonQuery(); 
     connection.Close(); 
     MessageBox.Show("good add"); 
    } 

有用更名爲存儲過程,這是工作的感謝所有

+0

date參數的值應該是DateTime值,而不是一個字符串。對於字符串,您可能會遇到問題,認爲它不被視爲有效日期(例如,當您將其發佈到使用不同文化的服務器時)。 –

+0

但我使用DateTimePicker,所以用戶總是給價值形式日期 –