0

我正在尝试将新信息添加到表中,但是在将日期/时间从字符转换为字符串时,它给了我这个 Conversion failed 错误

这是我的代码的一部分:

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;是正确的吗?

4

2 回答 2

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();
于 2013-04-01T02:35:26.857 回答
0

我不记得有时如何或为什么将纯日期/时间对象发送到 SQL 中不会像我们预期的那样工作。

解决方案是将日期/时间对象转换为通用ISO 8601 格式yyyyMMdd HH:mm:ss.fff- SQL 绝对喜欢这种格式。

这是一个摘自J W 的答案的片段,它实际上展示了最佳实践:

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我记得还尝试使用as 分隔符尝试 ISO 8601 格式: yyyyMMddTHH:mm:ss.fff. 试试带空格的版本,它在使用 en-US SQL 语言环境和非 en-US 语言环境时也适用于我。

于 2013-04-01T03:04:05.737 回答