首先需要检查SUM的值是否为DBNull,如果该列没有数据,得到的值是DBNull.Value. object obj = dt.Compute("SUM(Number)", ""); if (obj != DBNull.Value ) { decimal sum = (decimal)dt.Compute("SUM(Number)", ""); }
我试过了,还是一样的问题,而且我所统计的表中没有值为NULL的列。 真不知道问题出在哪里。
怪事啊,你在把这段代码贴到console程序里看看DataTable dt = new DataTable(); dt.Columns.Add( "Number" , typeof( decimal ) );DataRow dr = dt.NewRow(); dr[ 0 ] = 100 ; dt.Rows.Add( dr );dr = dt.NewRow(); dr[ 0 ] = 19.6; dt.Rows.Add( dr ); object obj = dt.Compute("SUM(Number)", ""); if (obj != DBNull.Value ) { decimal sum = (decimal)dt.Compute("SUM(Number)", ""); } ============== 出现问题的原因是否因为DataTable列的数据类型不是decimal??
那应该是个int的字段,是一个通过SQL查询后统计得出的列,SQL语句如下:SELECT cdlb.id, COUNT(cdmc.id) AS zlidnum FROM cdmc RIGHT OUTER JOIN cdlb ON cdmc.lbid = cdlb.id GROUP BY cdlb.id ORDER BY cdlb.id DESC其中zlidnum是我想查询后求和的列
先定义一个数据行数组DataRow[] dr
然后:
for(int i=0;i<dr.Length;i++)
{
int sum=0;
sum+=dr[i][idnum];
}
for(int i=0;i<dr.Length;i++)
{
int sum=0;
sum+=dr[i]["idnum"];
}
InvalidCastException: 指定的转换无效但我跟踪是看到sum值为0,可能是什么原因造成的呢?
前提条件需要DataTable,比如说DataTable为DT。
dr=DT.Select();
其中fyxxzllb11为数据集,tx_cdmc为表
------------------------------------------------
DataRow[] dr;
int sum=0;
dr=fyxxzllb11.tx_cdmc.Select();
for(int i=0;i<dr.Length;i++)
{
sum+=(int)dr[i]["idnum"];
}
------------------------------------------------
object obj = dt.Compute("SUM(Number)", "");
if (obj != DBNull.Value )
{
decimal sum = (decimal)dt.Compute("SUM(Number)", "");
}
真不知道问题出在哪里。
dt.Columns.Add( "Number" , typeof( decimal ) );DataRow dr = dt.NewRow();
dr[ 0 ] = 100 ;
dt.Rows.Add( dr );dr = dt.NewRow();
dr[ 0 ] = 19.6;
dt.Rows.Add( dr );
object obj = dt.Compute("SUM(Number)", "");
if (obj != DBNull.Value )
{
decimal sum = (decimal)dt.Compute("SUM(Number)", "");
}
==============
出现问题的原因是否因为DataTable列的数据类型不是decimal??