c# – 无法将’System.Object []’类型的对象强制转换为’System
我正在开发一个C#VS 2008 / SQL Server网站应用程序.我是ASP.NET的新手.但是,我在以下代码的最后一行收到了上述错误.你能给我一些如何解决这个问题的建议吗?这编译正确,但运行后遇到此错误.
我想要做的就是将第二行“dt”中的项目存储到字符串参数中.第一行是标题,所以我不想要这些值.第二行是第一行值.我的SQL存储过程需要将这些值作为字符串.所以我想解析第二行数据并加载到2个字符串参数中.我在下面添加了更多代码. DataTable dt; Hashtable ht; string[] SingleRow; ... SqlConnection conn2 = new SqlConnection(connString); SqlCommand cmd = conn2.CreateCommand(); cmd.CommandText = "dbo.AppendDataCT"; cmd.Connection = conn2; SingleRow = (string[])dt.Rows[1].ItemArray; SqlParameter sqlParam = cmd.Parameters.AddWithValue("@" + ht[0],SingleRow[0]); sqlParam.SqlDbType = SqlDbType.VarChar; SqlParameter sqlParam2 = cmd.Parameters.AddWithValue("@" + ht[1],SingleRow[1]); sqlParam2.SqlDbType = SqlDbType.DateTime; 我的错误: System.InvalidCastException was caught Message="Unable to cast object of type 'System.Object[]' to type 'System.String[]'." Source="App_Code.g68pyuml" StackTrace: at ADONET_namespace.ADONET_methods.AppendDataCT(DataTable dt,Hashtable ht) in c:Documents and SettingsAdminMy DocumentsVisual Studio 2008WebSitesJerryApp_CodeADONET methods.cs:line 88 InnerException: 解决方法
嗯.您正在尝试访问DataTable dt的属性,但看起来您可能希望该表包含AppendDataCT查询的结果.它没有.小心你的行索引访问:C#中的数组是从0开始的,而dt.Rows [1]将检索表中的第二行.
除此之外,请查看DataRow.ItemArray的文档.该方法返回一个对象数组,而不是一个字符串数组.即使你的行只包含字符串,你仍然在处理一系列对象,你将不得不这样对待它.您可以将行中的每个单独项目转换为字符串,如果这是该列的正确数据类型: foreach (string s in dt.Rows[1].ItemArray) { //... } 编辑:好的,为了回应您的编辑,我看到您正在尝试做什么.有很多不同的方法可以做到这一点,我特别建议你从HashTables转向像Dictionary这样的通用等价物 – 你将节省很多运行时的铸造悲伤.也就是说,这是您的代码最简单的适应: DataRow dr = dt.Rows[1]; // second row SqlParameter p1 = cmd.Parameters.AddWithValue((string)ht[0],(string)dr[0]); SqlParameter p2 = ... 你不需要领先的“@”; ADO.NET将为您添加.只要键0处有一个字符串(这是一种使用哈希表的相当非标准的方法 – 你通常会有某种描述性键),并且如果数据表中的第一列包含,那么(字符串)强制转换就会起作用字符串. 我建议你看看typed datasets和generic collections.这里缺少它们会让你的代码变得有些脆弱. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |