C#和SQL Server - 使用存储过程
Fraquence int
[Prochain étalonnag] date
[date étalonnage] type:date
在Visual Studio中,我有添加新的(etalonnage),以我的表的用户输入的两个vules(Fraquence
和date étalonnage
形式)。
我想在SQL Server存储过程来做到这一点:
Prochain étalonnag = date étalonnage + (Month Fraquence).
列Prochain étalonnage
将被自动填写,当用户点击按钮Add
。
请检查下面的.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
我希望这是给你的
备注:你应该**不要**为存储过程使用'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_'并使用别的东西作为前缀 - 或者根本没有前缀! –
感谢您提供有关命名存储过程的警告和信息 – Eralper
另一方面:使用DateTime.Today或Date.Today代替'.Now.Date' –
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");
}
有用更名为存储过程,这是工作的感谢所有
date参数的值应该是DateTime值,而不是一个字符串。对于字符串,您可能会遇到问题,认为它不被视为有效日期(例如,当您将其发布到使用不同文化的服务器时)。 –
但我使用DateTimePicker,所以用户总是给价值形式日期 –
你尝试过这么远吗?请提供示例代码 - 有关更多信息,请阅读[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve) –
我知道这个方法System.DateTime.Now.AddMonths( ).ToShortDateString();但我不想要今天的日期,我不知道在这个例子中我是如何的 –