注意:不必关心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-ddISO 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();


除此之外,我还建议将concmd包裹在using() { ... }语句中,以确保可以正确处理这些内容,并为变量和字段名赋予像样的名称并使用一致的命名方案。

现在在我之后重复:


我将永远不会再运行已被字符串连接在一起的查询!
从现在开始,我将使用参数化查询

   如果我需要再次运行字符串连接的查询,我将确保所有值均正确转义



重复上述步骤,至少50次。

关于c# - 我想从C#中的DateTimePicker对象更新数据库表中具有“Datetime”数据类型的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32391368/

10-11 02:24
查看更多