现像:
    用asp.net代码拼写的sql语句,关键字为"中文"时,检索结果为空!经过调查,发现asp.net代码调用以下方法时,拼成的SQL语句还是中文,也没有变成乱码,即“?”号,把拼成的sql语句放进Oracle Sql Developer也可以检索出正确的结果,并且web.config里已经加上这句话, <globalization requestEncoding="gbk" responseEncoding="gbk" culture="zh-CN" fileEncoding="gbk"/>
    oracle 客户端的编码方式为:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    oracle 服务器断的编码方式为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
 
  public DataSet ExecuteDataSet(string query)
        {
            cnn = new OracleConnection(strConnectionString);
            OracleCommand cmd = new OracleCommand(query, cnn);
            if (query.StartsWith("SELECT") | query.StartsWith("select"))
            {
                cmd.CommandType = CommandType.Text;
            }
            else
            {
                cmd.CommandType = CommandType.StoredProcedure;
            }
            OracleDataAdapter da = new OracleDataAdapter();
            da.SelectCommand = cmd;
            DataSet ds = new DataSet();
            ds.Clear();
            da.Fill(ds);
            return ds;
        }  
小弟找了半天也没有找出结果,还请各位帮一下忙,分析一下原因!谢谢!

解决方案 »

  1.   

    select ht.zzqrid,ht.XUANTINUM,ht.HETONGNUM ,ht.WORKSNAME, au.autorname,au.ZHENGMING from  HETONGINFO ht,AUTHORINFO au  where 1=1 and ht.zzqrid = au.authorid   and ht.XUANTINUM like  '%王%'在sqldeveloper上可以检索出数据,但是在程序中检索不到数据!
      

  2.   

    编码问题:

    在你的那个页面添加
    <head>
        <title></title>
        <meta http-equiv= "Content-Type "   content= "text/html;   charset=gb2312 "> 
    </head>
      

  3.   

    da.SelectCommand = cmd;
      DataSet ds = new DataSet();
      ds.Clear();
      da.Fill(ds);
      return ds;断点看看这里得到的值是多少。如果没得到。就是这些地方写错了
      

  4.   

    加个断点,把拼成的SQL语句贴出来
    应该是你SQL语句拼接有问题
      

  5.   

    不能直接诶拼的,要转码后拼,你直接拼出的结果,在数据中,你传如的SQL语句就不对了。 public DataSet ExecuteDataSet(string query)
      {
      cnn = new OracleConnection(strConnectionString);
      OracleCommand cmd = new OracleCommand(query, cnn);
      if (query.StartsWith("SELECT") | query.StartsWith("select"))
      ...看看其中的  query  成什么了。肯定不对的
      

  6.   

    query 是没有问题的,不是乱码!
      

  7.   


    这跟ado.net有啥子关系嘛?!.net的内置的字符串,一律都是按照unicode编码的。你传递给oracle客户端驱动的命令,就是unicode编码的命令。
      

  8.   

    只要你在 query 变量监视出来正确的中文字,那么就不要再纠结什么网页的编码了。唉,真是有病乱投医啊!
      

  9.   

    select * from tableA
    where columnA like N'%xx%' and ColumnB = N'xx';
    注意字母N
      

  10.   

    DataSet ds = new DataSet("HETONGINFO");
      

  11.   

    没碰过这种情况, 我们项目中虽然涉及到中文, 但整个都是用的utf
    或者考虑试一下ODP.NET?
      

  12.   

    是不是你的Oracle是简易版的?字符集不是中文的,即一个中文字符不是占2个字节,而是三个字节呢??
      

  13.   


    应该不是这个原因,我在Oracle Sql Developer也可以检索出正确的结果。