gpt4 book ai didi

c# - 从 IDataReader 读取字段时出现间歇性 System.IndexOutOfRangeException

转载 作者:太空狗 更新时间:2023-10-30 01:26:32 25 4
gpt4 key购买 nike

我在代码中遇到了一个非常奇怪的问题,我不希望它会失败。这是一个基于 AspDotNetStoreFront 的网站,有一些流量但不是那么大。尝试从读取器读取数据库字段时站点间歇性崩溃。这种情况发生在网站的各个地方。此类代码的示例位于 object pValue = rs["PropertyValueString"];

行下方
private Dictionary<string, object> GetPropertValuePairs(string userName)
{
string query = string.Format("select PropertyName, PropertyValueString from dbo.profile with(nolock) where CustomerGUID = {0} and StoreID = {1}", DB.SQuote(userName),AppLogic.StoreID());

Dictionary<string, object> propertyValues = new Dictionary<string, object>();

using (SqlConnection conn = new SqlConnection(DB.GetDBConn()))
{
conn.Open();

using (IDataReader rs = DB.GetRS(query, conn))
{
while (rs.Read())
{
string pName = DB.RSField(rs, "PropertyName");
object pValue = rs["PropertyValueString"];

if (propertyValues.ContainsKey(pName) == false)
{
propertyValues.Add(pName, pValue);
}
}

rs.Close();
rs.Dispose();
}
conn.Close();
conn.Dispose();
}

return propertyValues;
}

这是 SqlClient 的标准用法,我看不出有什么问题。错误的堆栈跟踪是这样的:

System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) 处的 System.IndexOutOfRangeException 在 System.Data.SqlClient.SqlDataReader.GetOrdinal(字符串名称) 在 System.Data.SqlClient.SqlDataReader.get_Item(字符串名称) 在 AspDotNetStorefront.ASPDNSFProfileProvider.GetPropertValuePairs(字符串用户名) 在 AspDotNetStorefront.ASPDNSFProfileProvider.GetPropertyValues(SettingsContext 上下文,SettingsPropertyCollection settingsProperties) 在 System.Configuration.SettingsBase.GetPropertiesFromProvider(SettingsProvider 提供者) 在 System.Configuration.SettingsBase.GetPropertyValueByName(字符串属性名称) 在 System.Configuration.SettingsBase.get_Item(字符串属性名称) 在 System.Web.Profile.ProfileBase.GetInternal(字符串属性名称) 在 System.Web.Profile.ProfileBase.get_Item(字符串属性名称) 在 System.Web.Profile.ProfileBase.GetPropertyValue(字符串属性名称) 在 AspDotNetStorefront.SkinBase.OnPreInit(EventArgs e) 在 System.Web.UI.Page.PerformPreInit() 在 System.Web.UI.Page.ProcessRequestMain( bool 值 includeStagesBeforeAsyncPoint, bool 值 includeStagesAfterAsyncPoint)

当站点崩溃时,需要重新启动 IIS 才能恢复。它在带有 .NET 3.5 和 SQL 2008 的 Windows Server 2008 上,都是最新的。该机器是 64 位的,SQL Server 启用了 32 位模式以及使用“经典管道模式”的应用程序池。连接字符串是

 <add name="PrimaryConnectionString" connectionString="data source=XXXX;database=XXXX;Integrated Security=True;Application Name=XXXX;MultipleActiveResultSets=true" />

非常感谢任何帮助!!

最佳答案

我猜测您正在线程之间共享数据读取器的实例。确保 DB.GetRS 在所有情况下都返回数据读取器的新实例,而不是返回共享实例。

关于c# - 从 IDataReader 读取字段时出现间歇性 System.IndexOutOfRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com