在C#

时间:2018-08-17 06:24:43

标签: c#

我的查询文件如下:

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

除了更改查询文件或连接字符串之外,是否还有其他整洁的解决方案?

2 个答案:

答案 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。对于这个问题,这不是一个完美的解决方案,但对我而言有效。