0

明らかにTransoftドライバーであるDSNからテーブル名を接続して取得することについて質問を受けました。この質問はここにあります:

OdbcConnection.GetSchema("TABLES"); 動作していません

その答えがうまくいった後、すべてのテーブル名を表示できました。これらのテーブルの読み取りがまだうまく機能していないことがわかりました。エラーが発生します:

Failed to connect to data source: ERROR [HY000][Transoft][TSODBC][usqlsd](log: 5852-142748) File does not exist: APPT

APPT は読み取ったテーブル名です。今のところは単純なコードです。

void dumbRead(String tableName)
    {
        OdbcCommand sqlCommand = conn.CreateCommand();
        // execute sql
        sqlCommand.CommandText =
        "select * from " + tableName; //I even tried with qualifying table name like:
        // "select * from douglas." + tableName; where the douglas. is the account i.e.
        // the table owner I think.
        OdbcDataReader sqlReader = sqlCommand.ExecuteReader();
        int fieldCount = sqlReader.FieldCount;
        MessageBox.Show("Field Count: " + fieldCount);
    }

しかし、何らかの理由で select * ステートメントが気に入らないため、機能しません。上記のエラーが発生するだけです。Transoft USQL は本当に別物なのでしょうか?

これまでのところ、他のすべて(回答を得た最後の投稿に感謝します)はうまく機能しています.

コメントによると、これが私の接続文字列です。

    private void Form1_Load(object sender, EventArgs e)
    {
        txtDSNName.Text = "Company_Shared";
    }

    private void btnConnect_Click(object sender, EventArgs e)
    {
        ConnectToData(txtDSNName.Text);
    }
    public void ConnectToData(String dsn)
    {

         conn=   new System.Data.Odbc.OdbcConnection();

        //conn.ConnectionString = "FIL=MS Access;DSN=" + dsn;
        conn.ConnectionString = "DSN=" + dsn; //dsn equals "Company_Shared"
        try
        {
            conn.Open();
            MessageBox.Show("Connected!");
4

1 に答える 1

0

このような単純な構造を使用して、必要なODBCコンマと接続オブジェクトを構築してみてください。これは、単純な挿入についてテストしたばかりの例です。

        OdbcConnection odbcConn = new OdbcConnection(odbcConnString);//your odbc conn String
        odbcConn.Open();
        OdbcTransaction odbcTransStockList;//if you want to use transaction
        using (OdbcCommand odbcmdSelect = new OdbcCommand(strInsertStringAccess, odbcConn))//or if you are using SQL Server I am assuming it's Access
        {
            odbcmdInsert.CommandTimeout = 60;
            odbcTransStockList = odbcConn.BeginTransaction();
            odbcmdInsert.Transaction = odbcTransStockList;
            odbcmdInsert.CommandType = System.Data.CommandType.Text;
            try
            {
                odbcmdInsert.ExecuteNonQuery();
                odbcTransStockList.Commit();
            }
            catch (OdbcException odbcEx)
            {
                Console.WriteLine(odbcEx.Message);

            }
        }
        ((IDisposable)odbcTransStockList).Dispose();
        ((IDisposable)odbcConn).Dispose();
    }
    catch (OdbcException odbcEx)
    {
        Console.WriteLine(odbcEx.Message);
    }
于 2012-01-03T19:33:35.380 に答える