我正在尝试向表中添加新信息,但是当将日期/时间从字符转换为字符串时,它会给我转换失败错误。
以下是我的代码的一部分:
try
{
string sp = "add";
comando.CommandType = CommandType.StoredProcedure;
comando.CommandText = sp;
comando.Parameters.Clear();
comando.Parameters.Add(new SqlParameter("@person", SqlDbType.VarChar));
comando.Parameters.Add(new SqlParameter("@reason", SqlDbType.VarChar));
comando.Parameters.Add(new SqlParameter("@information", SqlDbType.VarChar));
comando.Parameters.Add(new SqlParameter("@date", SqlDbType.DateTime));
comando.Parameters[0].Value = obj.person;
comando.Parameters[1].Value = obj.reason;
comando.Parameters[2].Value = obj.information;
comando.Parameters[3].Value = obj.date;
comando.ExecuteNonQuery();
}
catch (Exception exc)
{
throw exc;
}
要获取我使用obj.date = DateTime.Now;
的日期信息,这是正确的吗?
答案 0 :(得分:0)
或者,您可以使用AddWithValue()
comando.CommandType = CommandType.StoredProcedure;
comando.CommandText = sp;
comando.Parameters.AddWithValue("@person", obj.person);
comando.Parameters.AddWithValue("@reason", obj.reason);
comando.Parameters.AddWithValue("@information", obj.information);
comando.Parameters.AddWithValue("@date", DateTime.Now);
// assuming connection is already open
comando.ExecuteNonQuery();
答案 1 :(得分:0)
我不记得有时或为什么有时将简单的日期/时间对象发送到SQL中将无法正常工作。
解决方案是将日期/时间对象转换为通用ISO 8601 format:yyyyMMdd HH:mm:ss.fff
- SQL绝对喜欢。
这是一个从J W's answer开始的片段,它实际上是最佳实践:
const String UniversalDateTime = "yyyyMMdd HH:mm:ss.fff";
comando.CommandType = CommandType.StoredProcedure;
comando.CommandText = sp;
comando.Parameters.AddWithValue("@person", obj.person);
comando.Parameters.AddWithValue("@reason", obj.reason);
comando.Parameters.AddWithValue("@information", obj.information);
comando.Parameters.AddWithValue("@date", obj.date.ToString(UniversalDateTime));
// assuming connection is already open
comando.ExecuteNonQuery();
当SQL收到日期/时间字符串表示时,该值将自动转换为SQL的内部日期/时间值。
PS。我还记得使用T
作为分隔符来尝试ISO 8601格式:yyyyMMddTHH:mm:ss.fff
。尝试使用带有空格的版本,这对我来说在使用en-US SQL语言环境和非en-US语言环境时也适用。