C# 使用 Sybase.Data.AseClient.dll 查询 sybase

标签 c# character sybase

我将 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 ;
}

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

catch Sybase.Data.AseClient.AseException
  Message=Character set conversion is not available between client character set 'cp936' and server character set 'iso_1'.

  Source=Sybase.Data.AseClient
  StackTrace:
       at Sybase.Data.AseClient.AseConnectionImpl.CheckResult(Int32 res, Boolean forOpen)
       at Sybase.Data.AseClient.AseConnectionImpl.Open()
       at Sybase.Data.AseClient.AseConnectionPool.GetConnection(AseConnection conn)
       at Sybase.Data.AseClient.AseConnectionPoolManager.GetConnection(String connectionString, AseConnection conn)
       at Sybase.Data.AseClient.AseConnection.Open()
       System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
       at CXTC运维.Form1.query(String jjoprid) location d:\Documents and Settings\11075452\My Documents\Visual Studio 2010\Projects\CXTC运维\CXTC运维\Form1.cs:行号 41
  InnerException: 

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

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


catch Sybase.Data.AseClient.AseException
  Message=Attempt to locate entry in sysdatabases for database 'thq' by name failed - no entry found under that name. Make sure that name is entered properly.

  Source=Sybase.Data.AseClient
  StackTrace:
       at Sybase.Data.AseClient.AseConnectionImpl.CheckResult(Int32 res, Boolean forOpen)
       at Sybase.Data.AseClient.AseConnectionImpl.Open()
       at Sybase.Data.AseClient.AseConnectionPool.GetConnection(AseConnection conn)
       at Sybase.Data.AseClient.AseConnectionPoolManager.GetConnection(String connectionString, AseConnection conn)
       at Sybase.Data.AseClient.AseConnection.Open()
       at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
       at CXTC运维.Form

最佳答案

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

conn = new AseConnection("Data Source=192.168.100.251;database=thq;" +
                    "charset=iso_1;Port=7000;UID=snhqdbo;PWD=janhq@ary"); 

关于C# 使用 Sybase.Data.AseClient.dll 查询 sybase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17801180/

相关文章:

c# - Microsoft Rest ServiceClientTracing - 如何将跟踪结果输出到控制台或调试?

java - Tomcat 7 连接池问题

c# - CS 学生的现代 Powerbuilder 与 C#/Java/C++

c# - 在 .net core 中使用 linq2db 时获取 "Could not load file or assembly ' System.EnterpriseServices""

c# - 如何在 MVC 5 中设置自定义 ClaimsPrincipal?

c# - 是什么导致抛出带有消息 "Cannot access ' System.IO.MemoryStream'"的 COMException?

c# - RavenDB ID 前缀和 REST API

mySQL 字符集

Java堆栈推送方法NullPointerException

c++ - 本系列的逻辑/算法