我的查询文件如下:
USE DB_A
GO
SELECT * FROM sch.table;
但是由于某种原因,我的连接字符串应被强制设置为@"Data Source=SERVER;Initial Catalog=DB_B; ......"
由于ExecuteNonQuery()
不支持GO
,因此此查询将分为两部分,即实际代码如下:
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ConnString;
OleDbCommand cmd = new OleDbCommand();
conn.open();
cmd.ComandText = "USE DB_A";
cmd.ExecuteNonQuery();
cmd.ComandText = "SELECT * FROM sch.table";
cmd.ExecuteNonQuery();
conn.close();
似乎USE DATABASE
不起作用,执行时它仍然报告错误cannot find object sch.table
。
除了更改查询文件或连接字符串之外,是否还有其他整洁的解决方案?
答案 0 :(得分:0)
您已经注意到USE
在这里不起作用。您可以做的是完全引用您的对象。所以代替
SELECT * FROM sch.table
写
SELECT * FROM DB_A.sch.table
请注意,仅当您可以使用与连接DB_B相同的凭据从DB_B访问DB_A时,此方法才有效。如果不是这种情况,则必须使用到DB_A的单独连接。
答案 1 :(得分:0)
一个可用的解决方案是从连接字符串中删除初始目录Initial Catalog=DB_B
。对于这个问题,这不是一个完美的解决方案,但对我而言有效。