将datetime类型char从表单插入数据库

时间:2013-01-21 07:30:09

标签: c# database string datetime insert

我正在尝试将datetime值插入到我的数据库表中,但我遇到了一个问题。 每次我尝试这样做时,都会弹出以下消息:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围的值。   声明已经终止。

这是我的代码:

public static void  DoQuery(string fileName, string sql)
{

    SqlConnection conn = ConnectToDb(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    com.ExecuteNonQuery();
    com.Dispose();
    conn.Close();

}
    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection cn = new SqlConnection();
        cn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='c:\users\***\***\visual studio 2010\Projects\***\***\Database.mdf';Integrated Security=True;User Instance=True";
        cn.Open();
        string[] dateArr = dateBox.Text.Split('/');
        int[] dateInt = new int[3];
        for (int i = 0; i < 3; i++)
        {
            dateInt[i] = Int16.Parse(dateArr[i]);
            MessageBox.Show(dateInt[i]+"");
        }
        DateTime date = new DateTime(dateInt[2],dateInt[1],dateInt[0]);

        string sql = "INSERT INTO existProducts(name,date,price,amount) VALUES ('" + nameBox.Text + "','" + date + "','" + priceBox.Text + "','" + amountBox.Text + "')";

        MyAdoHelper.DoQuery("Database.mdf", sql);
        MessageBox.Show("Success!");

        cn.Close();
    }
  

注1:我有一个exeption处理,但我删除它因为我一直有   处理此异常并且程序运行不正常。

     

注2:我审查了连接字符串,但是有一个连接,它工作正常。

2 个答案:

答案 0 :(得分:3)

使用Parameters很可能你的问题将会解决,(另一件重要的事情)你将从注射攻击中获得安全保障也是。

答案 1 :(得分:0)

在insert语句中使用字符串日期值.....

在insert语句中使用SqlParameters。

INSERT INTO existProducts (name,date,price,amount) VALUES (@name, @date, @price, @amount)


public static void  DoQuery(string fileName, string name, DateTime date, float price, float amount)
{

    SqlConnection conn = ConnectToDb(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    com.Paramaters.AddWithValue("name", name);
    com.Parameters.AddWithValue("date", date);
    ...
    ...
    com.ExecuteNonQuery();
    com.Dispose();
    conn.Close();

}