无法将类型为“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;
我的代码如下,我无法解决这个问题
请帮忙
很难理解你的代码应该做什么,而且你似乎不明白Rows
、Columns
和ItemArray
是什么意思。您可能应该阅读他们的文档。
我认为您要做的是这样的:
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);