25yicms利用ASP.NET(C#)+MSSQL技术全力打造功能最强大的营销型企业网站管理系统,企业做网站系统,做网站软件,提供div+css企业网站模板。
阅读内容

.net连mysql用datatable获取数据出现System.Byte[]的解决办法


时间:2014/12/27   来源:企业网站管理系统
 ,bet跟mysql是两个不同的提供商,所以在使用的时候总会出现一些问题,不像.net和mssql数据库,这两个才是最完美的结合。但是在技术层上来讲,我们的技术面还是需要广泛点。这次由于客户的需要,需要使用.net开发,数据库使用mysql。在功能全部完成的时候,把程序上传至服务器时发现.net连mysql用datatable获取数据出现System.Byte[]的问题。
 
在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[]的解决办法就如上面所写,大家可以作参考,如果有任何问题可以到企业网站管理系统论坛里发帖求帮助,我们这边的技术人员会进行相应的回答的。
点击次数:       打印此页  关闭