CS模式,C#如何远程连接sql2008数据库?

CS模式,C#如何远程连接sql2008数据库?,第1张

一般C/S模式连接远程数据是不会去直连的,而是通过一个中间系统去连接数据库。比如说你举的例子,客户端在上海,数据库在北京,那么需要在北京架一台WebService服务器(或在上海或其他城市也行,最好是在北京,与数据库在同一个内网里,但只有WebService服务器对外,而数据库服务器不对外),然后在WebService中实现增删查改功能,再利用Client端去直接访问这些WebService功能即可。

介绍四个办法:

效率低,但是 *** 作简单用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.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=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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9260336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存