我在asp.net中有一个应用程序,直到我在控制面板中的区域和语言设置中更改了日期时间格式时才运行良好。
安装XP时,日期时间格式是默认的。我在安装XP时选择了印度标准时间。
我将日期时间格式更改为dd / MM / yyyy HH:mm:ss。每当我试图将任何日期时间插入表中时,我的应用程序就开始抛出异常。
我得到的例外是:
System.Data.SqlClient.SqlException:将数据类型varchar转换为datetime时出错。
请帮我解决这个问题
答案 0 :(得分:2)
如果没有看到正在抛出的代码,很难确切地知道发生了什么。但是,如果需要将日期传递给SQL Server,通常最好使用ISO 8601标准进行表示,因为它是明确的并且与语言环境无关。最重要的格式是:
yyyy-MM-dd
日期hh:mm:ss
时间yyyy-MM-dd hh:mm:ss
日期/时间我的猜测是你有一个查询在当前语言环境中发送日期,并且服务器上的语言环境不匹配。
编辑:为了记录,这并不排除Rob在他的回答中所说的任何内容,即尽量避免传递硬编码日期或硬编码SQL。这仅适用于您出于某种原因需要的情况。
编辑2:我被告知某些区域设置yyyy-MM-dd
格式 仍然错误;所以,如果你需要传入一个文字日期字符串,那么你应该改为使用yyyyMMdd
。
答案 1 :(得分:1)
根据我的评论,您可能希望确保使用的代码行为与下面的代码类似(即使用参数而不是字符串连接)
var myConnectionString = "connection string goes here";
var myDateValue = DateTime.Now;
using (var connection = new SqlConnection(myConnectionString))
{
using (var command = new SqlCommand("SELECT COUNT(1) FROM dbo.table WHERE datecolumn = @datevalue", connection))
{
var dateValueParameter = new SqlParameter("@datevalue", myDateValue);
command.Parameters.Add(dateValueParameter);
var result = Convert.ToInt32(command.ExecuteScalar());
}
}
答案 2 :(得分:0)
尝试将“Current Language = YourLanguage”添加到SQL Server连接字符串中。 WhereLanguage是您希望SQL在读取日期等值时使用的语言。
通过执行以下SQL命令,您可以看到SQL支持的所有语言的列表:
select * from master.dbo.syslanguages