在mysql中要获取的表的类型为int,但是在.net中用datatable获取表的数据时出现System.Byte[]的值。按习惯在网上相接搜索相关问题,基本找了一下午没有找到可以直接解决的办法。网上说法不一:有的说是编码问题,有的说直接用odbc就不会出现这样的问题。
在网上确实找到一个可行的办法: System.Text.Encoding.UTF8.GetString((byte[])ds.Tables[0].Rows[i]["title"])。这样来转换,方法可行。可是对于我不行,我不可能在每个datatable调用值的时候去加上这样一段代码。而且程序员都喜欢偷懒的。
实在不行,就只好自己想办法了,想既然可以在调用datatable的列时加上这样一段代码,那么我就可以在mysqlhelp.cs公共类里只要调用到查询的公共类中修改代码,这样不就一次性把代码修改好了吗?说改就改,终于经自己的努力解决好了,现在分享给大家。
DataTable dt = Ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow rowNew = dtResult.NewRow();
for (int j = 0; j < dt.Columns.Count; j++)
{
if (dt.Columns[0].DataType.FullName == "System.Byte[]")
{
Byte[] bt = (Byte[])dt.Rows[i][j];
//dt.Columns[j].DataType = Type.GetType("System.String");
//dt.Rows[i][j] = System.Text.UTF8Encoding.UTF8.GetString(bt);
rowNew[dt.Columns[j].ColumnName] = System.Text.UTF8Encoding.UTF8.GetString(bt);
}
else
{
rowNew[dt.Columns[j].ColumnName] = dt.Rows[i][j].ToString().Trim();
}
}
dtResult.Rows.Add(rowNew);
}
解释下上面的代码,Ds.Tables[0]是我从mysql中获取到的数据,然后在for循环里,对在.net中获取mysql数据后每行每列的数据类型为System.Byte[]进行转换,其它类型的就不需要管了。
好了,.net连mysql用datatable获取数据出现System.Byte[]的解决办法就如上面所写,大家可以作参考,如果有任何问题可以到企业网站管理系统论坛里发帖求帮助,我们这边的技术人员会进行相应的回答的。