Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.NET调用SQL Server 2008中的存储过程时,结果排序不正确_C#_.net_Sql Server 2005_Sql Server 2008 - Fatal编程技术网

C# 从.NET调用SQL Server 2008中的存储过程时,结果排序不正确

C# 从.NET调用SQL Server 2008中的存储过程时,结果排序不正确,c#,.net,sql-server-2005,sql-server-2008,C#,.net,Sql Server 2005,Sql Server 2008,我们有一个存储过程,它使用一个参数和一个CASE,以便按不同的列对结果进行排序。如果从SSMS执行存储过程,则无论使用哪个版本的SQL Server(2005或2008),记录都会根据参数进行排序。如果我们使用完全相同的参数值从应用程序调用它,则它只能使用SQL Server 2005正确地进行排序。我浏览了SQLDataReader,但它在2008年时得到的记录顺序错误 我也尝试了.NET2.0,以确保它与.NETFramework版本为4.0没有任何关系,我得到了相同的结果 我所知道的这些服

我们有一个存储过程,它使用一个参数和一个CASE,以便按不同的列对结果进行排序。如果从SSMS执行存储过程,则无论使用哪个版本的SQL Server(2005或2008),记录都会根据参数进行排序。如果我们使用完全相同的参数值从应用程序调用它,则它只能使用SQL Server 2005正确地进行排序。我浏览了SQLDataReader,但它在2008年时得到的记录顺序错误

我也尝试了.NET2.0,以确保它与.NETFramework版本为4.0没有任何关系,我得到了相同的结果

我所知道的这些服务器之间的唯一区别,除了SQL Server版本之外,是使用SQL 2008的服务器是多处理器的


这可能是什么原因?任何帮助都将不胜感激。

我将在此冒险,假设您的
CASE
语句正在检查参数中的
NULL
值。使用默认设置发送.NET
NULL
值可能无法很好地处理SQL
NULL

例如,如果您的参数是一个字符串,并且您正在使用集成的
SQLDataProvider
,则有一个设置会自动将
NULL
字符串替换为空白字符串。 我将通过让存储过程
选择您的参数来验证您的.NET是否确实发送了您认为是的参数


事实上,如果是,取决于
NULL
参数,我将在.NET中处理验证,然后不将参数发送到存储过程。这是一种非常简单的方法,可以确保参数实际上是
NULL

当数据库是SQL Server 2005并在2008下运行时,我看到了这种奇怪的错误

确保兼容性级别与服务器版本匹配

一张1000字的图片:

在这种情况下,数据库不在建议的兼容级别

小心!!!一旦您更改了兼容性级别,您可能无法撤消它,因此请进行备份

小心!!!一旦您更改了兼容性级别,您可能无法撤消它,因此请进行备份


小心!!!一旦您更改了兼容性级别,您可能无法撤消它,因此请进行备份

我们可以看到调用存储过程的.NET代码吗?这可能是问题所在。我们还能看到存储过程吗?它没有使用
选择顶部。。。CTE中的ORDER BY…
是吗?如果我们能看到过程中的排序T-SQL以及调用SQL过程的.NET代码,那将非常有用。@Luis出于好奇,这有帮助吗?