介绍四个办法:
效率低,但是 *** 作简单用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里直接使用,建立好查询,可以直接调用。
C#连接数据库有以下几个步骤:1:使用配置的数据库连接串,创建数据库连接 Connection 对象
2:构建 *** 作的sql语句
3:定义command对象
4:打开数据连接
5:执行命令
举一个例子,删除 *** 作
public class StudentService
{
//从配置文件中读取数据库连接字符串
private readonly static string connString = ConfigurationManager.ConnectionStrings["accpConnectionString"].ToString()
private readonly static string dboOwner = ConfigurationManager.ConnectionStrings["DataBaseOwner"].ToString()
AdoNetModels.Student model = new Student()
#region 删除数据1
public int DeleteStudent(int stuID)
{
int result = 0
// 数据库连接 Connection 对象
SqlConnection connection = new SqlConnection(connString)
// 构建删除的sql语句
string sql = string.Format("Delete From Student Where stuID={0}", stuID)
// 定义command对象
SqlCommand command = new SqlCommand(sql, connection)
try
{
connection.Open()
result = command.ExecuteNonQuery() // 执行命令
}
catch (Exception ex)
{
Console.WriteLine(ex.Message)
}
finally
{
connection.Close()
}
return result
}
#endregion
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)