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
是固定大小的类型
我正在使用 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
是固定大小的类型