System.Data.SqlClient.SqlException 从字符串 .net ADO 转换日期 and/or 时间时转换失败

System.Data.SqlClient.SqlException Conversion failed when converting date and/or time from character string .net ADO

我正在使用 ADO 将 WFA 中的 dateTimePicker 中的数据插入到数据库中。数据库有 Date dataType - YYYY/MM/DD。所以我是从 dateTimePicker 到 ShortDateFormat 的短日期。那不就是YYYY/MM/DD吗?我得到这个例外:

System.Data.SqlClient.SqlException: 'Conversion failed when converting date and/or time from character string.'

代码:

using (SqlConnection conn = new SqlConnection(connString))
                        {
                            string query = "Insert Into Users VALUES (@Name, @Lastname, @Phone, @birthDate, @Image)";
                            using (SqlCommand cmd = new SqlCommand(query, conn))
                            {
                                string FileName = btnImgPath.Text;
                                cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 100).Value = tbName.Text;
                                cmd.Parameters.Add("@Lastname", SqlDbType.NVarChar, 100).Value = tbLastname.Text;
                                cmd.Parameters.Add("@Phone", SqlDbType.NVarChar, 100).Value = tbPhone.Text;
                                cmd.Parameters.Add("@birthDate", SqlDbType.Date, 100).Value = dtp1.Value.Date.ToShortDateString();
                                cmd.Parameters.Add("@Image", SqlDbType.VarBinary).Value = imageData;

                                conn.Open();
                                cmd.ExecuteNonQuery();
                                conn.Close();
                            }
                         }

代码将字符串传递给日期类型的参数:

cmd.Parameters.Add("@birthDate", SqlDbType.Date, 100).Value = dtp1.Value.Date.ToShortDateString();

这需要在发送到数据库之前解析回 DateTime

改为直接传递 DateTime 值:

cmd.Parameters.Add("@birthDate", SqlDbType.Date).Value = dtp1.Value.Date;

DateTime.Date 属性 returns 没有原始值时间部分的 DateTime。

也不需要指定大小,因为 date 是固定大小的类型