错误插入DateTime c#type到SQL DateTime列

时间:2011-09-29 13:38:56

标签: c# sql datetime

我正在尝试向我的SQLEXPRESS数据库发出INSERT命令 尝试在我的DateTime列中输入值时收到错误。

这是我使用的sql命令:

SqlDateTime sTime = new SqlDateTime(book.PublishedDate);                

string sql = string.Format("Insert into Books" +
"(Name, PublishDate, IsInternal) Values" +
"('{0}', '{1}', '{2}')",
book.Name, sTime.Value, book.IsInternal);

book.PublishedDate - 是DateTime类型 PublishedDate列是sql DateTime

我收到以下错误: 将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

我该如何解决?

1 个答案:

答案 0 :(得分:2)

使用参数化查询。几乎所有您可能正在使用的数据访问技术都支持它们。它们允许您将日期作为日期处理,而不是将所有内容转换为字符串。

E.g。 (ADO.Net SqlCommand)

SqlCommand cmd = new SqlCommand("Insert into Books (Name,PublishDate,IsInternal) Values (@Name,@PublishDate,@IsInternal)");
cmd.Parameters.Add(new SqlParameter("@Name", System.Data.SqlDbType.VarChar, 50));
cmd.Parameters.Add(new SqlParameter("@PublishDate", System.Data.SqlDbType.DateTime));
cmd.Parameters.Add(new SqlParameter("@IsInternal", System.Data.SqlDbType.Bit));

cmd.Parameters["@Name"].Value = book.Name;
cmd.Parameters["@PublishDate"].Value = book.PublishedDate;
cmd.Parameters["@IsInternal"].Value = book.IsInternal;

人们在客户端代码和SQL数据库之间报告数据类型问题时所犯的最大错误源是,无论出于何种原因,他们都将所有内容转换为字符串。这不仅通常效率较低,而且您还依赖于至少两次转换在两者之间正确发生(类型 - >字符串和字符串 - >类型),并且通常至少有一次转换将留给无论默认的转换函数是什么。