无法将类型为“System.Object[]”的对象转换为类型“System.IConvertible”如何处理此错误

本文关键字:System 类型 何处理 错误 处理 IConvertible Object 对象 转换 | 更新日期: 2023-09-27 18:27:20

 string dt = "SELECT Last_login,SnapNo,Membership from [User] where FB_Id='" + uid1 + "'";
    da = new SqlDataAdapter(dt, con);
    ds1 = new DataSet();
    da.Fill(ds1);
    DateTime dt1 = Convert.ToDateTime(ds1.Tables[0].Rows[0].ItemArray);
    Int32 snapno = Convert.ToInt32(ds1.Tables[0].Columns["Last_login"]);
    string membership = ds1.Tables[0].Rows[2].ItemArray.ToString();
    DateTime dt2 = DateTime.Now;

我的代码如下,我无法解决这个问题

请帮忙

无法将类型为“System.Object[]”的对象转换为类型“System.IConvertible”如何处理此错误

很难理解你的代码应该做什么,而且你似乎不明白RowsColumnsItemArray是什么意思。您可能应该阅读他们的文档。

我认为您要做的是这样的:

var row = ds1.Tables[0].Rows[0];
DateTime lastLogin = (DateTime)row["Last_login"];
Int32 snapno = (Int32)row["snapno"];
string membership = (string)row["membership"]:

">我的代码如下,我无法解决这个问题": 您是否尝试使用调试器?异常发生在哪一行?这个问题并不真正表明你自己试图解决问题的任何努力。

无论如何,在信息有限的情况下,我将猜测解决方案:

ds1.Tables[0].Rows[0].ItemArray是行中所有项目的数组。不能将其转换为日期时间。您可能希望:

DateTime dt1 = Convert.ToDateTime(ds1.Tables[0].Rows[0]["Last_login"];

顺便说一下,您确实应该使用参数化的 SQL 查询。

ItemArray 返回一个对象数组。 DateTime存储单个值。您期望转换做什么?

如果对象数组包含日期,则可以执行此操作

using system.Linq;
...
DateTime[] dates = ds1.Tables[0].Rows[0].ItemArray.Cast<DateTime>().ToArray();

如果您只需要一个日期

DateTime dt1 = (DateTime)ds1.Tables[0].Rows[0]["DateColumn"];    

其中"DateColumn"是表列的名称。

DateTime dt1 = Convert.ToDateTime(ds1.Tables[0].Rows[0].ItemArray);

这实际上没有意义,因为 DataRow 类型的 ItemArray 属性返回一个object[](从名称中应该很明显(。您需要获取字段,例如字符串,然后才能执行此操作,如下所示:

DateTime dt1 = Convert.ToDateTime(ds1.Tables[0].Rows[0]["Last_login"]);

您看到的异常会发生,因为 Convert 类的所有转换器方法都使用 IConvertible 对象(即其类型实现该接口的对象(。通常只有最原始的类型实现此接口,如字符串、int 和 DateTime。这是因为将这些类型的值相互转换通常是有意义的。

如果您考虑一下,您会发现对象数组和 DateTime 类型之间没有这种常见的联系,这就是您出现异常的原因。

我想建议你先尝试自己解决问题,然后再来这里寻求帮助。通过这种方式,您可以学到更多东西,从长远来看,这会让您更有效率。

对于初学者,我建议您阅读有关 IConvertible 接口和 Convert 类的 msdn 文档。

Convert.ToDateTime(IConvertible);

IConvertible是函数内部的任何内容都必须实现的接口。SQL 调用返回的对象数组不实现 ICOnvertible,因此不能用作参数。

可以将其视为尝试调用如下函数:

private void DoSomething(String input)

通过使用

DoSomething(999);
相关文章: