介紹四個辦法:
效率低,但是操作簡單用OpenRowSet方法直接在SQL上建立查詢
效率低,但是方便,用ACCESS的ODBC庫
效率高,編程要使用邏輯性強壹點,遍歷兩個數據庫的數據表,使用臨時表作為連接池
效率高,操作簡單,利用ACCESS連接表
OpenRowset用法(例連接兩表查詢):
Select?*?from?表A?Inner?Join?表B?OpenRowSet?[Driver={SQL?Server};Server=IP;UID=...;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.Data;using?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=0;i<ds.Tables[0].Rows.Count;i++)
{
charu(ds.Tabels[0].Rows[i]["ID"].ToString()); //把表A的ID作為參數}?
}?
catch
{
//..錯誤信息
}
finnaly
{
cnn.Close();
}
}
用ACCESS連接表是最簡單的,但是比上面的速度要慢壹點,最重要的數據不安全,ACCESS密碼是可以破解的。上面的如果用三層結構寫,反編譯也破解不了。在網上看壹下ACCESS怎麽建立SQL Server遠程連接表,這些表將當作ACCESS表可以在ACCESS裏直接使用,建立好查詢,可以直接調用。