【问题标题】:Insert into DATE type in a SQL Server database with monthCalendar使用 monthCalendar 插入 SQL Server 数据库中的 DATE 类型
【发布时间】:2020-08-23 20:42:44
【问题描述】:

我在网络上找不到任何可以解释如何插入的内容

if (radioButton1.Checked) 
{
    SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Andrej\Desktop\B9PROBA\B9\B9\Database5.mdf;Integrated Security=True;Connect Timeout=30");

    SqlCommand com = new SqlCommand("INSERT INTO ARB11StavkeRezervacije(RezervacijaID,RBR,KomadID,Datum,KolikoSedista) VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + comboBox1.SelectedValue + "','" + textBox3.Text + "','" + monthCalendar1.SelectionRange.Start.ToShortDateString() + "')", conn);

    try
    {
        conn.Open();

        SqlDataAdapter da = new SqlDataAdapter(com);
        DataSet ds = new DataSet();
        da.Fill(ds);

        MessageBox.Show("Uspesno Uneti Podaci");
    }
    catch (Exception e1) 
    {
        MessageBox.Show(e1.Message); 
    }
    finally 
    {
        conn.Close(); 
    }
}

我总是收到一个字符串无法转换为日期的错误。

我不知道如何插入它

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables
  • @Csharpclass,该参数不仅可以解决安全问题,如果您将monthCalendar1.SelectionRange.Start 值作为datetime 参数而不是字符串传递,它将解决您的问题。见why parameters are a best practice
  • @DanGuzman 我为我的无知道歉。谢谢你的回答

标签: c# sql-server date time


【解决方案1】:

你应该使用参数化查询 - 你应该在你的SqlCommand对象上使用.ExecuteNonQuery()

试试这段代码 - 我试图猜测参数的数据类型(假设 ....IDINT) - 根据需要调整,我可能是错的,因为我不知道是什么您的 SQL Server 表如下所示:

if (radioButton1.Checked) 
{
    using (SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Andrej\Desktop\B9PROBA\B9\B9\Database5.mdf;Integrated Security=True;Connect Timeout=30"))
    using (SqlCommand com = new SqlCommand("INSERT INTO ARB11StavkeRezervacije(RezervacijaID, RBR, KomadID, Datum, KolikoSedista) " + 
                                    "VALUES (@RezervacijaID, @RBR, @KomadID, @Datum, @KolikoSedista)", conn))
    {
        // define and set the parameters
        com.Parameters.Add("@RezervacijaID", SqlDbType.Int).Value = Convert.ToInt32(textBox1.Text);
        // not sure what datatype this parameter would be - please adapt to match your needs
        com.Parameters.Add("@RBR", SqlDbType.?????).Value = textBox2.Text;
        com.Parameters.Add("@KomadID", SqlDbType.Int).Value = comboBox1.SelectedValue;
        // not sure what datatype this parameter would be - please adapt to match your needs
        com.Parameters.Add("@Datum", SqlDbType.?????).Value =  textBox3.Text;
        com.Parameters.Add("@KolikoSedista", SqlDbType.DateTime).Value = monthCalendar1.SelectionRange.Start;

        try
        {
            conn.Open();
            com.ExecuteNonQuery();
            conn.Close());

            MessageBox.Show("Uspesno Uneti Podaci");
        }
        catch (Exception e1) 
        {
            MessageBox.Show(e1.Message); 
        }
    }
}

【讨论】:

  • marc_s 它只是不起作用。 “无法将参数值从字符串转换为 int32”并且没有告诉我这个错误在哪里。
  • @Csharpclass: 那肯定是Convert.ToInt32(textBox1.Text) 的那一行——设置第一个参数——很明显,你没有输入一个有效的 INT 值在那个文本框中 - 所以也许那个参数 不是 INT 数据类型?我无法知道这一点,因为您没有向我们展示您的表格结构 - 所以只需根据需要调整它......
猜你喜欢
  • 2022-01-17
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多