注意:不必关心Connection,因为连接可以正常工作。
数据库中的字段为DateTime
DateTime dtc = Convert.ToDateTime(dateTimePicker1.Value.Date);
cmd = new SqlCommand("UPDATE LAB_TESTING set Lab_Nam='" + lab_id + "',Rslt_lb='" +
textBox1.Text + "',Tst_Dat='" + dtc + "' Where Lab_ID='" +
bindex + "'", con);
con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("You Update recored successfully", "delete", MessageBoxButtons.OK, MessageBoxIcon.Information);
dataGridView1.DataSource = null;
con.Close();
readdatagrid1();
运行程序后,从字符串转换日期和/或时间时,转换失败。
最佳答案
不要使用字符串连接来构建查询(SQL injection alert,也可以是read this!)。使用parameterized queries。至于您的问题:将日期格式设置为yyyy-MM-dd
(ISO 8601),即可使用。
如果您正确使用了参数化查询,则可以按原样传递DateTime,并且驱动程序将确保将值正确传递给SQL,而不管“格式” /语言环境设置如何,因为该值作为日期时间而不是字符串传递。像这样:
cmd = new SqlCommand(@"UPDATE LAB_TESTING set Lab_Nam = @labnam,
Rslt_lb = @result, Tst_Dat = @tstdat
Where Lab_ID = @id", con);
cmd.Parameters.AddWithValue("@labnam", lab_id );
cmd.Parameters.AddWithValue("@result", textBox1.Text);
cmd.Parameters.AddWithValue("@tstdat", dateTimePicker1.Value.Date);
cmd.Parameters.AddWithValue("@id", bindex);
con.Open();
cmd.ExecuteNonQuery();
除此之外,我还建议将
con
和cmd
包裹在using() { ... }
语句中,以确保可以正确处理这些内容,并为变量和字段名赋予像样的名称并使用一致的命名方案。现在在我之后重复:
我将永远不会再运行已被字符串连接在一起的查询!
从现在开始,我将使用参数化查询
如果我需要再次运行字符串连接的查询,我将确保所有值均正确转义
重复上述步骤,至少50次。
关于c# - 我想从C#中的DateTimePicker对象更新数据库表中具有“Datetime”数据类型的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32391368/