我试图插入一个日期时间值到我的数据库表,但我遇到了一个问题。每次我尝试这样做时,都会弹出以下消息:
将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 2010Projects******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:我有一个异常处理,但我删除了它,因为我一直有处理这个异常,程序不能正常运行。
注2:我删除了连接字符串,但有一个连接,它工作正常。
使用参数和很可能您的问题将得到解决,和(另一件重要的事情)您将保护自己免受注入攻击。
在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();
}