我有一个非常奇怪的问题,我正在使用System.Data.SqlClient
。
通过存储过程从SQL Server获取数据。
当我在开发和Stagging机器上测试应用程序时,它运行正常,但是当我在生产服务器上部署应用程序时,我随机获得SqlDataReader
{{1使用不同的列名!。
每1000个请求中的2个请求中出现错误(近似值)。
SQL Server是Clustered
源代码:
IndexOutOfRangeException
存储过程:
public static List<CountryInfo> GetAllCountries(){
List<CountryInfo> Items = new List<CountryInfo>();
try{
using (rdr = SqlHelper.ExecuteReader(Globals.ConnectionString, "unv_spGetAllCountries"))
{
while (rdr.Read())
{
CountryInfo item = new CountryInfo();
item.CountryId = Convert.ToInt32(rdr["CountryId"]);
item.CountryName = rdr["CountryName"].ToString();
item.FirstLevel = rdr["FirstLevel"].ToString();
item.SecondLevel = rdr["SecondLevel"].ToString();
Items.Add(item);
}
}
}
catch (Exception ex)
{
throw ex;
}
Items.TrimExcess();
return Items;
}
已经过测试
任何人都面临这样的问题并解决它?
答案 0 :(得分:3)
我打赌这不是数据读者问题。我的猜测是一个或多个用户帐户正在使用sproc(等)的更具体(和更旧)的副本 - 例如Fred.MyProc而不是dbo.MyProc,或者sproc中有条件分支逻辑返回在某些情况下不同的列 - 可能是您忘记更新的代码分支。
另一个潜在的问题可能是DB causin中使用的不同对象的区分大小写不同;即Myproc vs MyProc - 如果DB区分大小写,则可能不同。
要确定,请附上SQL跟踪以记录完全发送失败案例的内容(以及由谁);然后在SSMS之类的东西中重复一遍,将dev与prod进行比较。
答案 1 :(得分:1)
我发现SqlDataReader
varibale rdr
在控制器基类中被声明为static
,这使得它成为所有控制器之间的共享变量。请求线程使用相同的DataReader
并更改其中的列。