2016-12-05 176 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,所以用户总是给价值形式日期 –