日期:2014-05-17  浏览次数:20443 次

纠结的转码问题
情况如下

      
      Dim b As Byte() = System.Text.Encoding.GetEncoding("gbk").GetBytes(strSql)
      strSql = System.Text.Encoding.GetEncoding("cp850").GetString(b)
'必须将sql查询语句转为cp850编码,否则无法语句中无法使用中文
            Dim SybaseConn As New AseConnection("Data Source='0.0.0.0';UID='nitty';PWD='sa';Database='abc';")
            Dim SybaseCom As New AseCommand(strSql, SybaseConn)
'数据库连接字符串
            Dim SybaseDA As New AseDataAdapter(SybaseCom)
            Dim Ds As New DataSet
            SybaseConn.Open()
            SybaseDA.Fill(Ds)
'正常的填充DATASET
            GridView1.DataSource = Ds.Tables(0)
            GridView1.DataBind()
'绑定


最后情况是GridView1里的中全是乱码,必须转码。那么请问,我应该在那一步转码呢?
------最佳解决方案--------------------

     SybaseConn.Open()
            SybaseDA.Fill(DS)

            DT.Columns.Add("编号", GetType(String))
            DT.Columns.Add("付款单位", GetType(String))
            DT.Columns.Add("金额", GetType(Double))
            DT.Columns.Add("备注", GetType(String))
            DT.Columns.Add("付款银行", GetType(String))
            DT.Columns.Add("付款账号", GetType(String))
            DT.Columns.Add("时间", GetType(Date))

            For i As Integer = 1 To DS.Tables(0).Rows.Count
                Dim NDR As DataRow = DT.NewRow
                For c As Integer = 0 To 6
                    NDR(c) = GetEncoding("gbk").GetString(GetEncoding("cp850").GetBytes(DS.Tables(0).Rows(i - 1).Item(c)))
                Next
                DT.Rows.Add(NDR)
            Next

            GridView1.DataSource = DT
            GridView1.DataBind()


从数据库取出值以后进行转码,然后重新放回到datatable里让GridView绑定。
[代码分享]上传资料到服务器(普通表单数据和文件)