2

我导入Sybase.Data.AseClient.dll我的 C# 项目以连接到 sybase 数据库并查询类似这样的内容

private DataSet query(string jjoprid)
{
    string queryStr = "select oprid, oprname,orgid,lastmodified from                SA_CXTC_OPRINFO where oprid = \"" + jjoprid + "\";";
    DataSet ds ;
    try
    {
        conn = new AseConnection("Data Source=192.168.100.251;database=thq;" +
            "charset=cp936;Port=7000;UID=snhqdbo;PWD=janhq@ary");
        command = new AseCommand(queryStr, conn);
        adapter = new AseDataAdapter(command);
        ds = new DataSet();
        adapter.Fill(ds);                
    }
    catch (AseException ex)
    {
        Console.WriteLine(ex.Message);
        return null;
    }
    finally
    {
        if (null != conn)
            conn.Close();
    }    
    return ds ;
}

奇怪的是,我得到了这样的异常

捕获 Sybase.Data.AseClient.AseException
  消息=客户端字符集“cp936”和服务器字符集“iso_1”之间的字符集转换不可用。

  源=Sybase.Data.AseClient
  堆栈跟踪:
       在 Sybase.Data.AseClient.AseConnectionImpl.CheckResult(Int32 res,Boolean forOpen)
       在 Sybase.Data.AseClient.AseConnectionImpl.Open()
       在 Sybase.Data.AseClient.AseConnectionPool.GetConnection(AseConnection conn)
       在 Sybase.Data.AseClient.AseConnectionPoolManager.GetConnection(字符串 connectionString,AseConnection conn)
       在 Sybase.Data.AseClient.AseConnection.Open()
       System.Data.Common.DbDataAdapter.FillInternal(DataSet 数据集,DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为)
       在 System.Data.Common.DbDataAdapter.Fill(DataSet 数据集,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为)
       在 System.Data.Common.DbDataAdapter.Fill(数据集数据集)
       在 CXTC运维.Form1.query(String jjoprid) 位置 d:\Documents and Settings\11075452\My Documents\Visual Studio 2010\Projects\CXTC运维\CXTC运维\Form1.cs:行号 41
  内部异常:

它表明客户端字符和服务器字符之间的冲突,但我不知道如何解决这个问题,任何人都可以帮助我吗?

谢谢你,帕拉多,我听从了你的建议,得到了这个

捕获 Sybase.Data.AseClient.AseException
  消息=尝试在 sysdatabases 中按名称查找数据库 'thq' 的条目失败 - 在该名称下找不到条目。确保正确输入了该名称。

  源=Sybase.Data.AseClient
  堆栈跟踪:
       在 Sybase.Data.AseClient.AseConnectionImpl.CheckResult(Int32 res,Boolean forOpen)
       在 Sybase.Data.AseClient.AseConnectionImpl.Open()
       在 Sybase.Data.AseClient.AseConnectionPool.GetConnection(AseConnection conn)
       在 Sybase.Data.AseClient.AseConnectionPoolManager.GetConnection(字符串 connectionString,AseConnection conn)
       在 Sybase.Data.AseClient.AseConnection.Open()
       在 System.Data.Common.DbDataAdapter.FillInternal(DataSet 数据集,DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为)
       在 System.Data.Common.DbDataAdapter.Fill(DataSet 数据集,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为)
       在 System.Data.Common.DbDataAdapter.Fill(数据集数据集)
       在CXTC运维.Form
4

1 回答 1

2

尝试将字符集更改iso_1为如下

conn = new AseConnection("Data Source=192.168.100.251;database=thq;" +
                    "charset=iso_1;Port=7000;UID=snhqdbo;PWD=janhq@ary"); 
于 2013-07-23T06:41:10.260 回答