我正在尝试向我的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数据类型转换为日期时间数据类型会导致超出范围的值。
我该如何解决?
答案 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数据库之间报告数据类型问题时所犯的最大错误源是,无论出于何种原因,他们都将所有内容转换为字符串。这不仅通常效率较低,而且您还依赖于至少两次转换在两者之间正确发生(类型 - >字符串和字符串 - >类型),并且通常至少有一次转换将留给无论默认的转换函数是什么。