我在安装一个在多个客户站点上运行良好的产品时遇到了问题,我相信这个问题与他们数据库服务器上的排序规则设置有关。我的代码看起来像这样(我更改了表和变量名称,因为代码是专有的):
using (SqlCommand insertCommand = dbConnection.CreateCommand())
{
insertCommand.CommandText = "INSERT INTO [myTable] ([valueOne] ,[valueTwo] ,[CreationDate]) VALUES (@valueTwo ,@valueTwo ,@creationDate);select IDENT_CURRENT('myTable');";
insertCommand.Parameters.AddWithValue("@valueOne", "Value One");
insertCommand.Parameters.AddWithValue("@valueTwo", "Value Two");
insertCommand.Parameters.AddWithValue("@CreationDate", CreationDate);
dbConnection.Open();
object result = insertCommand.ExecuteScalar();
dbConnection.Close();
}
这适用于大多数站点以及我们的开发和 QA 机器,但在这个站点上,我们收到一条错误消息“必须声明标量变量“@creationDate”。我看到的主要差异是该站点的排序规则值设置为 SQL_Latin1_General_CP1_CS_AS我们的设置都是 SQL_Latin1_General_CP1_CI_AS。我为我们的数据库更改了此设置,但服务器仍设置为区分大小写的变体。这确实解决了我们在使用不同表时遇到的另一个问题(那个是表名,而不是参数名) ,但由于某种原因它仍然是一个问题。有没有人知道我如何能比通过和修复我们代码库中的所有案例差异更快地解决这个问题?
该站点使用 SQL Server 2005,我们的代码是用 C# 和 .NET 3.5 编写的。
谢谢-霍利斯