c#object来自变量

时间:2016-12-30 15:52:23

标签: c# object

当我尝试这样的事情时

DataTable wynikIlosc=API.exported.Database.executeQueryWithResult("select count(*) as ilosc from Przedmioty limit 1");
przedmioty= new object[(int)wynikIlosc.Rows[0]["ilosc"]];

我收到此错误:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidCastException: Specified cast is not valid.

当我使用这个

przedmioty= new object[20];

它有效。 对象数组中的新对象数组也是如此。

przedmioty[0]=new object[6] {"test",1,1337,1,1,"test"};

工作但是

int i=0;
przedmioty[i]=new object[6] {"test",1,1337,1,1,"test"};

没用。

2 个答案:

答案 0 :(得分:0)

ilosc可能不会以Type.Int32(这是一个int)的形式返回。它可以作为DbType(或OracleDbType或任何数据库)enum值返回,例如DbType.Int32OracleDbType.Decimal。在处理这些数据类型时,显式转换并不总是很好。为了解决这个问题,我经常使用结果字段的.ToString()方法,然后使用.Parse.TryParse作为投射方式:

double.Parse(field[0][i].ToString());

答案 1 :(得分:0)

MySQL count(*)返回BIGINT(长C#类型)。

https://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_count

尝试施展为长:

DataTable table = new DataTable();
table.Columns.Add(new DataColumn { ColumnName = "ilosc", DataType = typeof(long) });
table.Rows.Add(table.NewRow());
table.Rows[0]["ilosc"] = 3;
var test2 = new object[(long)table.Rows[0]["ilosc"]];