2013-04-01 70 views
0

我试图向表中添加新信息,但它给了我这个将日期/时间从字符转换为字符串时发生转换失败错误。将日期/时间对象传递给SQL时转换失败

这里是我的代码部分:

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

'obj.date = DateTime.Now.ToString()'? – eandersson

回答

0

我不记得是如何或为何有时将一个普通的日期/时间对象转换成SQL,因为我们预计它不会工作。

解决的办法是将日期/时间对象转换为通用ISO 8601 formatyyyyMMdd 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语言环境时适用。

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(); 
+0

如果我尝试obj.date = DateTime.Now.ToString()我得到一个错误。现在在数据库上的日期类型是datetime – black1

+0

我假设'obj'是一个类。 date是什么数据类型? –

+0

数据类型是datime – black1

相关问题