我有一个关于从显然是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!");
答案 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);
}