我在C#中使用Windows窗体。
我正在尝试填充包含DateTime
列的SQL Server数据库中的表。
现在当我的PC的时钟格式为dd-MM-yyyy
时,当我尝试使用以下查询插入数据时,出现错误
将varchar数据类型转换为日期时间数据类型会导致超出范围的值
代码:
SqlConnection cn = new SqlConnection("Data Source=PCN11-TOSH;Initial Catalog=mydb;Integrated Security=True");
cn.Open();
SqlCommand cm = new SqlCommand("Insert into Orders (Order_number, Phone, DateTime, address ) values ('"
+ textBox1.Text + "','" + textBox2.Text + "', '"+ DateTime.Now +"' ,'"
+ textBox3.Text + "')");
cm.Connection = cn;
cm.ExecuteNonQuery();
cn.Close();
但是当我将PC的时钟格式更改为yyyy-MM-dd
时,它可以正常工作。似乎SQL Server只接受yyyy-MM-dd
格式。
我的问题是:如何根据我的PC的时钟格式(DateTime
)将dd-MM-yyyy
插入SQL Server列?
谢谢
答案 0 :(得分:8)
使用参数化查询,而不是连接sql命令文本。
它不仅可以保护你免受sql注入,而且还使用强类型参数(例如,参数应该具有SqlDbType.DateTime
的类型来传递日期时间值),因此问题就会消失。
var cm = new SqlCommand("Insert into Orders (Order_number, Phone, DateTime) values (@OrderNumber, @Phone, @DateTime)");
cm.Parameters.Add("@OrderNumber", SqlDbType.VarChar);
cm.Parameters["@OrderNumber"].Value = textBox1.Text;
cm.Parameters.Add("@Phone", SqlDbType.VarChar);
cm.Parameters["@phone"].Value = textBox2.Text;
cm.Parameters.Add("@DateTime", SqlDbType.DateTime);
cm.Parameters["@DateTime"].Value = DateTime.Now;