Transoft ODBC sql Reader错误:文件不存在:TableName

时间:2012-01-01 21:51:40

标签: c# sql odbc transoft

我有一个关于从显然是Transoft驱动程序的DSN连接和获取表名的问题。这个问题在这里:

OdbcConnection.GetSchema("TABLES"); not working

在那个有效的答案之后,我可以显示所有的表名。现在我发现,阅读这些表仍然不能正常工作。我收到一个错误:

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!");

1 个答案:

答案 0 :(得分: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);
    }