sql 列转行,表为空的时候,导致在datatable中列的DataType为DBnull,求解惑。
先贴代码
StringBuilder sql2 = new StringBuilder();
sql2.Append("SELECT info.*,fkid");
DataSet lin = SqliteHelper.getDataset(sqlconn.conn, CommandType.Text, "select * from monthset", null);
DataTable dt = lin.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
sql2.Append(",[L" + dt.Rows[i]["monthname"].ToString() + "]");
sql2.Append(",[J" + dt.Rows[i]["monthname"].ToString() + "]");
}
sql2.Append("FROM info left join (");
sql2.Append("select fkid,");
for (int i = 0; i < dt.Rows.Count; i++)
{
sql2.Append("max(case smonth when '" + dt.Rows[i]["monthname"].ToString() + "' then sbyl else 0 end) as [L" + dt.Rows[i]["monthname"].ToString() + "],");
sql2.Append("max(case smonth when '" + dt.Rows[i]["monthname"].ToString() + "' then sbenjia else 0 end) as [J" + dt.Rows[i]["monthname"].ToString() + "],");
}
sql2.Remove(sql2.Length - 1, 1);
sql2.Append(" from submonth group by fkid) as tb on id=tb.fkid ");
try
{
ds = SqliteHelper.getDataset(sqlconn.conn, CommandType.Text, sql2.ToString(), null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "读取资料错误");
}
ds.Tables[0].NewRow();来添加行就会报错:无效的存储类型DBNULL;上午用的时候还是可以的完全没有问题。下午就再也不行了,通过查看DataTable的列,发现通过case when 转换的列的类型是这样的:DataType = {Name = DBNull FullName = System.DBNull },求解惑啊。
[解决办法]
数据类型不对,如果是NULL就正确了,把Sql贴出来和你数据库字段对比一下。应该是你哪里把数据类型搞错了!
[解决办法]
在查询的时候,如果为数据库的空值,做下处理
select isnull(id,0) from usertable 如果为null 返回0
[解决办法]
smonth这个数据是什么类型的?
[解决办法]
case end 的语法 不是 case when a=b then else c end 吗 难道 case a when b then else c end 这样也行
我试试先