加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 无法将’System.Object []’类型的对象强制转换为’System

发布时间:2020-12-15 19:36:22 所属栏目:百科 来源:网络整理
导读:我正在开发一个C#VS 2008 / SQL Server网站应用程序.我是ASP.NET的新手.但是,我在以下代码的最后一行收到了上述错误.你能给我一些如何解决这个问题的建议吗?这编译正确,但运行后遇到此错误. 我想要做的就是将第二行“dt”中的项目存储到字符串参数中.第一行
我正在开发一个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.这里缺少它们会让你的代码变得有些脆弱.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读