none
从sysbase数据库取出来的数据乱码

    问题

  • 同事工作需要从公司一个系统查找数据出来做报表。

    dataGridView显示从sysbase数据库取出来中文字乱码,英文和数字都正常,请问如何解决?

    在Sybase Interactive SQL運行 SELECT DB_PROPERTY( 'CharSet' ),看到charSet是cp850.

    Interactive SQL查询出来的中文数据也乱码,请问如何编码才能在dataGridView显示正常中文?



    2016年8月10日 8:10

答案

  •  sda.Fill(dt);

    foreach(DataRow dataRow in dt.Rows)

    {

    //这里根据需要,将要转码的字符串列进行转化,我只取了第4列进行转化(索引从0开始)

    byte[] unknow = Encoding.GetEncoding(850).GetBytes(  Convert.ToString(dataRow[3]));
                string Big5 = Encoding.GetEncoding(950).GetString(unknow);

    dataRow[3]=big5;

    }

    //经过上面的转化,这里绑定的就是正确的

    dataGridView1.DataSource = dt;


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    2016年8月10日 10:04

全部回复

  • 数据保存的时候有没有用unicode编码保存,也就是常说的nvarchar,不是varchar


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年8月10日 8:38
  • sybase的这个数据库是公司别一套系统用的,数据库结构不太清楚,也不能去动这个数据库.

    现在是想能不能把查询出来数据,有没有转编码或其它方法,让中文可以正常显示.

    2016年8月10日 8:46
  • byte[] unknow = Encoding.GetEncoding(850).GetBytes(dataGridView1.Rows[3].Cells[3].Value.ToString());
                string Big5 = Encoding.GetEncoding(950).GetString(unknow);
                MessageBox.Show(Big5);

    现在dataGridView第4行4格那个中文字可以正常显示了,有什么方法把整个dataGridView都编码吗?

    2016年8月10日 9:02
  • 你查出来是DataTable还是Object

    直接在数据源上修改即可,foreach一下数据源,作转码处理


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年8月10日 9:27
  • 谢谢你的回答,是DataTable

                DbCommand.CommandText = sqlComStr;
                OdbcDataReader DbReader = DbCommand.ExecuteReader();
                OdbcDataAdapter sda = new OdbcDataAdapter();
                sda.SelectCommand = new OdbcCommand(sqlComStr, DbConnection);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                dataGridView1.DataSource = dt;


    能不能写个代码给我,万分感谢!

    2016年8月10日 9:39
  •  if(dataGridView1.RowCount!= 0)
                {
                        for (int j=0;j<dataGridView1.RowCount;j++)
                        {
                        var f = dataGridView1.Rows[j].Cells[3].Value.ToString();     //这里出错,並未將物件參考設定為物件的執行個體。
                        byte[] unknow = Encoding.GetEncoding(850).GetBytes(f);
                        string Big5 = Encoding.GetEncoding(950).GetString(unknow);
                            dataGridView1.Rows[j].Cells[3].Value = Big5;
                        }
                }
    2016年8月10日 10:02
  •  sda.Fill(dt);

    foreach(DataRow dataRow in dt.Rows)

    {

    //这里根据需要,将要转码的字符串列进行转化,我只取了第4列进行转化(索引从0开始)

    byte[] unknow = Encoding.GetEncoding(850).GetBytes(  Convert.ToString(dataRow[3]));
                string Big5 = Encoding.GetEncoding(950).GetString(unknow);

    dataRow[3]=big5;

    }

    //经过上面的转化,这里绑定的就是正确的

    dataGridView1.DataSource = dt;


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    2016年8月10日 10:04
  • 中文正常显示了,万分感谢.
    2016年8月10日 10:22