【问题标题】:C# and SQL Server - using a stored procedureC# 和 SQL Server - 使用存储过程
【发布时间】:2016-12-05 05:38:06
【问题描述】:

我有三列

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

在 Visual Studio 中,我有一个用于向我的表添加新(标准具)的表单,用户输入两个 vules(Fraquencedate étalonnage)。

我想用 SQL Server 中的存储过程来做到这一点:

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

当用户单击按钮Add 时,将自动填充列Prochain étalonnage

【问题讨论】:

  • 到目前为止你尝试过什么?请提供示例代码 - 更多信息,请阅读How to create a Minimal, Complete, and Verifiable example
  • 我知道这个方法 System.DateTime.Now.AddMonths().ToShortDateString();但我不想使用今天的日期,我不知道我在这个例子中是如何使用的

标签: c# sql-server date


【解决方案1】:

请检查以下 .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

注意:我根据 marc 的注释将存储过程从 sp_addRow 重命名为 prAddRow

希望对你有用

【讨论】:

【解决方案2】:
 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");
    }

这是工作谢谢大家

【讨论】:

  • 日期参数的值应该是DateTime 值,而不是字符串。使用字符串时,您可能会遇到认为它不是有效日期的问题(例如,当您将其发布到使用不同文化的服务器时)。
  • 但我使用的是 DateTimePicker,所以用户总是以 Date 形式给出值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多