介绍四个办法:
效率低,但是 *** 作简单用OpenRowSet方法直接在SQL上建立查询
效率低,但是方便,用ACCESS的ODBC库
效率高,编程要使用逻辑性强一点,遍历两个数据库的数据表,使用临时表作为连接池
效率高, *** 作简单,利用ACCESS连接表
OpenRowset用法(例连接两表查询):
Select * from 表A Inner Join 表B OpenRowSet [Driver={SQL Server}Server=IPUID=...PWD=...DataBase=...] On 条件ODBC方法,把C#连接ACCESS空数据库,利用ACCESS的ODBC驱动去连接外部SQL远程表
Select * from 表A Inner JOIN 表B IN ODBC[ODBC:Driver={SQL Server}Server=...uid=...pwd=...DataBase=...] as 查询2 On 表A.字段=查询2.字段遍历数据集合是最常用的办法,建立一个临时表在本地数据库也好在异地数据库也好,先去查询Server表,查询出来循环遍历他,遍历过程中把遍历的变量去作为另一个查询的参数,最后把另一个查询出来的数据逐条插入到临时表中,每一次 *** 作都先删除临时表再重新插入初始化他,这样就达到了用连接池来分析大量数据的目的,例(用Server1上的表A去匹配查询Server2上的表B,再插入Server3上的表C)
using System.Datausing System.SqlClient
...
//插入数据的过程
void charu(string ID) //用ID去查询Server2的表B,插入到Server3的表C
{
SqlConnection cnn=new SqlConnection()
cnn.ConnectionString="连接Server2的字符串"
try
{
cnn.Open()
DataSet ds=new DataSet
SqlDataAdapter sda=new SqlDataAdapter("Select * from 表B where ID='"+ID+"'",cnn)
sda.Fill(ds) //查出单条数据
SqlConnection cnn1=new SqlConnection()
cnn1.ConnectionString="连接Server3的字符串"
cnn1.Open()
//...插入查询出来的数据到Server3的表C
DataSet ds1=new DataSet
SqlDataAdapter sda1=new SqlDataAdapter("Insert Into 表C(字段)values('"+ds.Tables[0].Rows[0]["插入的字段"].ToString()+"')",cnn1)
sda1.Fill(ds1)
}
catch
{
//..错误信息
}
finnaly
{
cnn.Close()
}
}
}
void lianjiechaxun()
{
SqlConnection cnn=new SqlConnection()
cnn.ConnectionString="连接Server1的字符串"
try
{
cnn.Open()
DataSet ds=new DataSet
SqlDataAdapter sda=new SqlDataAdapter("Select * from 表A",cnn)
sda.Fill(ds)
for(int i=0i<ds.Tables[0].Rows.Counti++)
{
charu(ds.Tabels[0].Rows[i]["ID"].ToString())
//把表A的ID作为参数
}
}
catch
{
//..错误信息
}
finnaly
{
cnn.Close()
}
}
用ACCESS连接表是最简单的,但是比上面的速度要慢一点,最重要的数据不安全,ACCESS密码是可以破解的。上面的如果用三层结构写,反编译也破解不了。在网上看一下ACCESS怎么建立SQL Server远程连接表,这些表将当作ACCESS表可以在ACCESS里直接使用,建立好查询,可以直接调用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)