我在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
格式.
我的问题是:如何DateTime
根据我的PC时钟格式(dd-MM-yyyy
)插入SQL Server列?
谢谢
而不是连接您的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;