Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
Asp.net SqlDataAdapter Fill提供空主键_Asp.net_Sql Server_Sqldataadapter - Fatal编程技术网

Asp.net SqlDataAdapter Fill提供空主键

Asp.net SqlDataAdapter Fill提供空主键,asp.net,sql-server,sqldataadapter,Asp.net,Sql Server,Sqldataadapter,所以我有点头痛,我正在寻求帮助。我们最近将ASP.Net web表单应用程序从.Net 3.5、Win 2003和SQL 2008移动到了.Net 4.5、Win 2008和SQL 2012。该应用程序在旧平台上运行了4年多,没有任何问题。在新平台上,我们遇到了间歇性故障,导致其崩溃。我们添加了错误捕获,以隔离问题发生的确切位置以及我们所看到的没有任何意义 引发错误的行位于我们的DAL中,它查询表以获取与指定父键相关的主键列表: 选择 ItemKey 从项目 其中ItemParentKey=@K

所以我有点头痛,我正在寻求帮助。我们最近将ASP.Net web表单应用程序从.Net 3.5、Win 2003和SQL 2008移动到了.Net 4.5、Win 2008和SQL 2012。该应用程序在旧平台上运行了4年多,没有任何问题。在新平台上,我们遇到了间歇性故障,导致其崩溃。我们添加了错误捕获,以隔离问题发生的确切位置以及我们所看到的没有任何意义

引发错误的行位于我们的DAL中,它查询表以获取与指定父键相关的主键列表:

选择
ItemKey
从项目
其中ItemParentKey=@Key
创建表项
(
ItemKey int标识(1,1)不为空
,ItemParentKey int
,约束PK_项主键群集(ItemKey)
)
在.net端,我们使用SQL数据适配器的fill方法调用包含上述select语句的存储过程,并将结果加载到数据表中。当我们尝试循环遍历datatable的行并对键执行某些操作时,会发生错误,所有键都为null,这会导致无效的强制转换异常。数据表在xsd文件中定义,其中有一个名为Key的整数列

Adapter.Fill(数据);
foreach(data.KeyList中的KeyListRow行)
{
Item.Children.Add(Row.Key);//无效的强制转换异常
}
应该注意的是,实际上是设计器生成的代码在尝试转换为强类型列时抛出异常,我们可以在这里捕获异常

对此进行一次尝试,并添加代码以记录查询参数和结果的详细信息,这表明查询返回的参数值行数正确,但它们都返回null…(这在上述查询和表定义中是不可能的)

其他几点,这是间歇性的,它可以工作几天或几周而没有问题,然后在一周内每小时崩溃一次。当应用程序关闭时,手动执行存储的过程并检查导致错误的记录的数据将显示预期值,而不是应用程序在日志中报告的结果。重新启动站点的应用程序池将清除问题并使我们恢复正常,直到再次发生。在流量水平和应用程序宕机的频率之间似乎有轻微的相关性,但到目前为止,我们还无法具体分离出什么

对可能的原因或进一步的调查途径有何建议


编辑2015-03-16

例外情况详情:

ExceptionType-ExceptionMessage(钻取内部异常)

  • System.Web.HttpUnhandledException-引发了类型为“System.Web.HttpUnhandledException”的异常
  • System.Data.StrongTypingException-表“KeyList”中“Key”列的值为DBNull
  • System.InvalidCastException-指定的强制转换无效
  • 正在返回的数据:

    data.KeyList.Count:7
    data.KeyList[0]。键:NULL
    data.KeyList[1]。键:NULL
    data.KeyList[2]。键:NULL
    data.KeyList[3]。键:NULL
    data.KeyList[4]。键:NULL
    data.KeyList[5]。键:NULL
    data.KeyList[6]。键:NULL

    设计器生成的代码:

    公共部分类dsXXXX:global::System.Data.DataSet { 私有KeyListDataTable表keylist; [全局::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Design.TypedDataSetGenerator”,“4.0.0.0”)] [全局::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] PublicKeyListDataTableKeyList{ 得到{ 返回此.tableKeyList; } } /// ///表示强命名的DataTable类。 /// [全局::System.Serializable()] [global::System.Xml.Serialization.XmlSchemaProviderAttribute(“GetTypedTableSchema”)] 公共部分类KeyListDataTable:global::System.Data.TypedTableBase{ 私有全局::System.Data.DataColumn columnKey; [全局::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Design.TypedDataSetGenerator”,“4.0.0.0”)] 公钥ListDataTable(){ this.TableName=“KeyList”; this.BeginInit(); this.InitClass(); this.EndInit(); } [全局::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Design.TypedDataSetGenerator”,“4.0.0.0”)] 内部KeyListDataTable(全局::System.Data.DataTable){ this.TableName=table.TableName; if((table.CaseSensitive!=table.DataSet.CaseSensitive)){ this.CaseSensitive=table.CaseSensitive; } if((table.Locale.ToString()!=table.DataSet.Locale.ToString()){ this.Locale=table.Locale; } if((table.Namespace!=table.DataSet.Namespace)){ this.Namespace=table.Namespace; } this.Prefix=table.Prefix; this.MinimumCapacity=table.MinimumCapacity; } [全局::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Data.Design.TypedDataSetGenerator”,“4.0.0.0”)] 受保护的KeyListDataTable(全局::System.Runtime.Serialization.SerializationInfo,全局::System.Runtime.Serialization.StreamingContext上下文): 基础(信息、上下文){ this.InitVars(); } [全局::System.Diagnostics.DebuggerNonUserCodeAttribute()] [g]