在C#中我想执行一个使用2个不同数据库的查询(一个是Access for local,另一个是远程的,是MySQL)
我能够在VBA Access中完成它,但是如何在C#中做同样的事情?
这就是我在Access中所做的:
在表
中链接我的2个不同的表/数据库在VBA中:
sSQL = "INSERT INTO DB1tblClient SELECT * FROM DB2tblClient"
CurrentDb.Execute sSQL
如何在C#中执行此SQL? (使用什么对象等等......如果可以,请使用示例代码)
谢谢!
答案 0 :(得分:1)
您应该能够从任何应用程序运行相同的SQL命令。这是假设:
DB1tblClient
是本地访问表DB2tblClient
是Access 鉴于这些,您可以尝试以下方法:
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Stuff\MyAccessdb.mdb"))
{
conn.Open();
using (OleDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO DB1tblClient SELECT * FROM DB2tblClient";
cmd.ExecuteNonQuery();
}
}
如果您无法正确获取连接字符串,则可能需要检查connectionstrings.com,并且可能需要为使用这些提供程序的连接安装某些组件(MDAC或ACE)。
答案 1 :(得分:1)
有两种方法可以做到这一点。一种是在Access上设置链接表并运行单个查询。另一种是从c#运行两个查询并使用linq加入它们。
第一种方式更好。如果你真的必须使用linq,这里有一些示例代码:
dWConnection.Open();
dWDataAdaptor.SelectCommand = dWCommand1;
dWDataAdaptor.Fill(queryResults1);
dWDataAdaptor.SelectCommand = dWCommand2;
dWDataAdaptor.Fill(queryResults2);
dWConnection.Close();
IEnumerable<DataRow> results1 = (from events in queryResults1.AsEnumerable()
where events.Field<string>("event_code").ToString() == "A01"
|| events.Field<string>("event_code").ToString() == "ST"
select events ) as IEnumerable<DataRow>;
var results2 = from events1 in queryResults1.AsEnumerable()
join events2 in queryResults2.AsEnumerable()
on (string)events1["event_code"] equals (string)events2["event_code"]
select new
{
f1 = (string)events1["event_code"],
f2 = (string)events2["event_name"]
};
DataTable newDataTable = new DataTable();
newDataTable = results1.CopyToDataTable<DataRow>();
看看为什么我说链接表更好?
答案 2 :(得分:1)
用单一语句运行这样复杂的查询是不可能的。
基本上每个查询执行对象都由特定的数据库信息初始化, 所以每个数据库需要两个不同的对象首先想到。
现在2对象需要使用自己的连接对象进行初始化。
只需通过第一个对象获取数据,然后通过第二个连接对象将其插入另一个数据库。
答案 3 :(得分:0)
在尝试此类查询之前,您需要牢记以下几点
这两个数据库都可以从您的代码中访问。
数据库之间存在互连。
这两个数据库都可供您用于执行此查询的用户使用。
您需要按以下格式指定查询
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
而非TABLE_NAME
修改强>
如果您没有数据库之间的互连,则可以按照以下步骤进行操作
使用一个connection
连接到源数据库。
使用dataset
查询将源数据库中的数据读入datatable
或SELECT
。
使用秒connection
连接到目标数据库。
使用循环将所有记录逐个插入TARGET数据库,使用标准INSERT
查询