我有一个使用 SQL Server 2008R2 连接到另一台服务器的应用程序服务器。两台服务器的 GUI 都是法语,并且日期和数字格式都是法语。此外,用于执行命令语言的 SQL Server 和用户设置为法语(默认情况下全部)。但是,我通过将其放入 web.config 中将 WCF 服务中的格式设置为“en-GB”:
我在我的 LINQ to SQL dbcontext 文件中包含了一个存储过程,并且我传递了一个日期参数而不将其转换为字符串(因为 ORM 将其识别为日期)。
事情进展顺利,直到今天早些时候,程序停止执行并抛出异常,说字符串无法转换为日期。
我使用 SQL Profiler 跟踪查询,发现它正在执行以下查询:
declare @p9 int
set @p9=NULL
exec sp_executesql N'EXEC @RETURN_VALUE = [GIS].[GetOnlineTrackingRecords]
@CompanyId = @p0, @EntityIds = @p1, @MinDate = @p2, @MinRecordId = @p3, @TrackingType = @p4, @TrackAllEntities = @p5', N'@p0 int,@p1 varchar(8000),@p2 datetime,@p3 bigint,@p4 tinyint,@p5 bit,@RETURN_VALUE int output',
@p0=1,@p1='168',@p2='2013-10-24 16:36:28.690',@p3=NULL,@p4=1,@p5=0,@RETURN_VALUE=@p9 output
select @p9
(@p2 的主要问题)
包装我的存储过程的 ORM 方法如下所示:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name= "GIS.GetOnlineTrackingRecords")]
public ISingleResult<FMS2.Framework.TrackEntities.GetOnlineTrackingRecordsResult> GetOnlineTrackingRecords([global::System.Data.Linq.Mapping.ParameterAttribute(Name="CompanyId", DbType="Int")] System.Nullable<int> companyId, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="EntityIds", DbType="VarChar(MAX)")] string entityIds, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="MinDate", DbType="DateTime")] System.Nullable<System.DateTime> minDate, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="MinRecordId", DbType="BigInt")] System.Nullable<long> minRecordId, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="TrackingType", DbType="TinyInt")] System.Nullable<byte> trackingType, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="TrackAllEntities", DbType="Bit")] System.Nullable<bool> trackAllEntities)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), companyId, entityIds, minDate, minRecordId, trackingType, trackAllEntities);
return ((ISingleResult<FMS2.Framework.TrackEntities.GetOnlineTrackingRecordsResult>)(result.ReturnValue));
}
当我尝试在 SQL Server Management Studio 中执行相同的查询时,它失败了,但是它在我的机器上成功运行(使用英语 sql server)。在我将 SQL Server 引擎的语言和用户默认语言更改为 us_english 后,它可以正常运行,但只能从 SQL Server 运行,并且在从我的 WCF 应用程序调用时仍然失败并显示相同的错误消息。我已经使用 sys.dm_exec_sessions 和 SQL Profiler 仔细检查了查询是否正在使用 us_english 语言的用户下执行。我已经读过从 'yyyy-MM-dd HH:mm:ss' 字符串到迄今为止的转换应该在任何机器上都可以正常工作,但似乎不是:( 考虑到触摸代码会非常难的...
谢谢