2

sybase データベースに接続するために C# プロジェクトにインポートSybase.Data.AseClient.dllし、次のようなクエリを実行します。

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 をキャッチします。
  Message=クライアント文字セット '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 dataSet、Int32 startRecord、Int32 maxRecords、文字列 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 をキャッチします。
  Message=名前でデータベース 'thq' の sysdatabases のエントリを見つけようとしましたが失敗しました - その名前でエントリが見つかりません。名前が正しく入力されていることを確認してください。

  ソース=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、文字列 srcTable、IDbCommand コマンド、CommandBehavior 動作) で
       System.Data.Common.DbDataAdapter.Fill (DataSet dataSet、Int32 startRecord、Int32 maxRecords、文字列 srcTable、IDbCommand コマンド、CommandBehavior 動作) で
       System.Data.Common.DbDataAdapter.Fill (データセット データセット) で
       CXTC运维.Formで
4

1 に答える 1