全国统一热线:
028-86758058
18980748058
购买流程
付款方式
常见问题
在线提问
续租服务
购物车(
0
件)
用户名:
密 码:
记住
首 页
HOME
域名注册
DOMAIN
虚拟主机
WEB HOST
成品网站超市
AUTO Site
VPS主机
VPS SERVER
云 主 机
CLOUD HOST
租用托管
SERVER
海外主机
HK HOST
代理专区
AGENT
客服中心
SERVICE
站长教程
SERVICE
欢迎光临西部数据云计算中心,我们将竭诚为您提供最优质的服务!
中文域名
域名转入
域名转出
DNS管理
动态域名
获取域名证书
域名停放
域名过户
集群主机
双线主机
基本主机
港台主机
论坛主机
Linux主机
Vip合租主机
超G型主机
ASP.net主机
Java主机
智能建站主机
网店主机
美国主机
数据库
成品网站超市
智能建站主机
集群VPS主机
国内VPS主机
香港VPS主机
美国VPS主机
云主机介绍
云主机购买
服务器租用
主机托管
常见问题
香港主机
港台主机
美国主机
国内免备案
步骤流程
代理级别
代理合同
代理模式
代理优势
在线申请
产品列表
常见问题
代理商分布图
常见问题
有问必答
跟踪提问
购买流程
产品价格
付款方式
常用软件
网站备案
续租服务
汇款确认
相关文档
联系我们
域名资讯
主机资讯
行业动态
网页制作
php教程
mysql教程
域名资讯
云计算资讯
网络编程
您当前的位置:
首页
>
网络编程
>
Net教程
利用C#远程存取Access数据库
时间:2015-01-29 来源:互联网 作者:佚名
一、 技术要点
我们都知道Windows应用程序在运行时会启动一个进程,其总包括若干线程,不同的进程之间通信是开发分布式应用程序所必需的,传统上,这不仅需要深入了解通信流两端上进程的对象,而且还要深入了解低级别协议的宿主、应用程序编程接口以及配置工具等。总之,它是一项需要大量专业知识和经验的复杂任务。
幸好.Net为我们提供了远程处理功能,它所提供的通信方法可以快速而方便地完成上述建立通信的任务。因此,无论是需要快速开发 Web 应用程序,还是要花费更多时间生成关键的企业范围的应用程序,.NET Framework 都会提供支持。通过 .NET 远程处理,客户端应用程序可以使用同一台计算机或其网络中其他任何可用的计算机上的其他进程中的对象。
要使用 .NET 远程处理创建可以让两个对象跨越应用程序直接通信的应用程序,只需生成以下对象即可:
1、 可远程处理的对象。
2、 侦听对该远程对象的请求的应用程序即
服务器
程序。
3、 对该远程对象发出请求的客户端应用程序。
.Net下不同应用程序中的对象的通信方式有两种:一种是跨应用程序域边界传输对象副本,一种是使用代理交换消息。MarshalByRefObject 是通过使用代理交换消息来进行通信的对象的基类。当跨应用程序使用远程对象时,对象的基类必须是从 MarshalByRefObject 继承。
二、 程序实现
(1)我们先在VS的IDE中创建名为“TestRemoteAccess”的新的解决方案来容纳前述用来实现远程处理的三个项目,首先向解决方案中添加名为“RemoteObject”的类库,然后将默认创建的类名更改为“CRemoteAccess”,并且继承于“MarshalByRefObject”,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace RemoteObject
{
public class CRemoteAccess : MarshalByRefObject
{}
}
我们需要在该对象内创建用于连接和存取本地Access
数据库
的所有函数,供服务端客户端程序同时调用。用于连接和存取Access数据库的方法这里不再详述,参看附件源码。
首先所有需要向客户端公开的函数其可见性都必须设为 public。变量m_ConnString需要设置为public static,目的是当客户端调用了SetRemoteAccessConnString后将数据库连接字符串保存下来以备在本次连接期间始终能够访问,代码如下:
……
public static string m_ConnString;
……
public void SetRemoteAccessConnString(string Connstr)
{
m_ConnString = Connstr;
}
……
成功连接了Access数据库后我们需要返回数据集给请求的客户端进行显示和编辑,在远程对象中我们声明了几个相关函数:
private void LoadData(string SqlStr, string TableName)
public void SaveData(DataTable ClientDataTable)
public DataTable GetUserTable(string SqlStr, string TableName)
客户端可以传递SQL查询脚本通过调用 GetUserTable来获取相关数据库表的数据,并返回一个DataTable,然后可以将该DataTable附值给DataGridView以便将数据显示出来。GetUserTable通过调用私有的LoadData 函数来完成对数据的获取。SaveData函数用于将编辑过的数据集保存回本地Access数据库文件,代码如下:
……
m_connection.Open();
m_adapter.Update(ClientDataTable);
……
(2)远程对象创建完成,我们需要创建用于侦听该远程对象请求的服务端应用程序。在“TestRemoteAccess”解决方案中新建一个Windows窗体项目名为:“TestServer”,从工具箱中拖拽下几个组件,界面如下所示:
服务器程序TestServer除了具备远程访问对象的能力外,它最主要的作用就是获取实际的Access数据库文件路径,并且设置远程对象的数据库连接字符串。我们必须添加远程对象以及远程处理和网络通讯协议等的类库的引用。在服务器程序启动初始,需要创建远程对象的实例以及注册通信端口,然后调用RemotingConfiguration.RegisterWellKnownServiceType 方法,MSDN中关于该方法的描述是这样的:通过使用给定的参数初始化 WellKnownServiceTypeEntry 的新实例,将服务端上的对象 Type 注册为已知类型,所有知道已注册已知对象的 URI 的客户都可以获取该对象的代理。所谓URI即统一资源标识符 (Uniform Resource Identifier)。代码如下:
……
remotableObject = new RemoteObject.CRemoteAccess();
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.CRemoteAccess), "RithiaTestAccessServer", WellKnownObjectMode.Singleton);
……
当选择了要进行存取的Access数据库文件后,我们需要调用远程对象的SetRemoteAccessConnString方法,该方法将保存在本次与服务器程序连接期间连接该Access数据库文件的连接字符串,代码如下:
……
ProviderStr = ProviderStrPart + txtAccessMdbFileName.Text + ";Jet OLEDB:Database Password=" + txtAccessPassword.Text;
……
remotableObject.SetRemoteAccessConnString(ProviderStr);
……
(3)最后我们创建用于连接和请求服务的客户端程序,它会通过调用服务器程序TestServer已经注册的远程对象来获取相关数据集,并将编辑过的数据保存回实际的数据库文件。在“TestRemoteAccess”解决方案中新建一个Windows窗体项目名为:“TestClient”,从工具箱中拖拽下几个组件,界面如下所示:
客户端程序需要知道服务器程序所运行在的计算机名称或IP地址以及侦听的端口号,然后创建远程对象的实例,并且创建DataTable以便接收返回的数据,代码如下:
……
string RemoteURL;
Host = txtHost.Text;
Port = txtPort.Text;
RemoteURL = "tcp://" + Host + ":" + Port + "/RithiaTestAccessServer";
try
{
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan);
remoteObject = (RemoteObject.CRemoteAccess)Activator.GetObject(typeof(RemoteObject.CRemoteAccess), RemoteURL);
RemoteDataTable = new DataTable();
button3.Enabled = false;
}
catch (Exception E)
{
MessageBox.Show(E.Message.ToString());
}
finally
{
}
……
客户端程序根据服务程序所侦听的信道是TCP还是HTTP来注册相应的信道和端口号,并且组合成远程对象的Url,即Url= 信道://主机名:端口号/对象的Uri,然后创建远程对象的实例,就像使用本地对象一样可以对其进行存取,我们可以调用远程对象的GetUserTable方法获取指定查询脚本的结果集,代码如下:
……
RemoteDataTable = remoteObject.GetUserTable(txtSQL.Text, "Test");
dataGridView1.DataSource = RemoteDataTable;
……
保存结果集时仅需简单调用SaveData方法即可,代码如下:
……
remoteObject.SaveData(RemoteDataTable);
……
三、 结果
该程序成功地在Visual Studio .Net 2005及Windows XP SP2下调试运行通过。
源码下载:http://d.download.csdn.net/down/401452/q520525745
来顶一下
返回首页
推荐资讯
asp.net2.0实现邮件发送(测试成功)
1、Default.aspx代码如下:复制代码 代码如下:<%@PageLangua
ASP.NET下使用WScript.Shell执行命
ASP.NET提供了两种方法让我们使用COM组件:1、Server对象的C
相关文章
C#中的委托和事件学习(续)第1/3页
C#语言初级入门介绍
C#编码好习惯小结
C#声明方法实例说明
C#使用正则表达式实例
C#列出局域网中可用SQL Server服务器(续)
asp.net Repeater取得CheckBox选中的某行某个值的c#写
asp.net生成高质量缩略图通用函数(c#代码),支持多种生
asp.net(c#) ubb处理类
C#(.NET)数据访问连接、查询、插入等操作的封装类
栏目更新
栏目热门
返回首页
关于我们
联系我们
付款方式
价格总览
资讯中心
友情链接
媒体关注
有问必答
投诉建议
网站备案
《中华人民共和国增值电信业务经营许可证》编号:川B2-20080058号
官方网址:
xibushuju.com
西部数据
Copyright © 2002~2015
天府快车
版权所有
电话总机:
028-86758058
(50线) 传真:
028-86758058