辛苦积攒200分向大家请教:使用remote连接上远程对象,在随后的引用中发生了错误.....(ok后,立马结帐)

tjq_tang 2003-12-29 05:57:01
[目的]:
在数据库服务器运行一个服务,它负责建立数据库连接,客户端通过管道获得数据库连接对象.这时候客户端操作可以使用这个OleDbConnection对象进行各种操作.好像这个对象是在客户端生成的一样.

[简单代码]:
ChannelServices.RegisterChannel(new TcpClientChannel());
RemoteDB.Operator obj = (RemoteDB.Operator)Activator.GetObject(typeof(RemoteDB.Operator),"tcp://192.168.1.120:8087/Hi");
if(obj==null)
{
MessageBox.Show("没有连接上服务器");
return;
}

System.Data.OleDb.OleDbDataAdapter ada = new OleDbDataAdapter("select * from employee", obj.GetDBConn());//这里发生错误,提示信息:
其他信息: 由于安全限制,无法访问类型 System.Runtime.Remoting.ObjRef。
ada.Fill(dt);
this.dataGrid1.DataSource = dt;

[已经实现]:

在函数处传入sql语句,可以正确返回执行的结果;
比如公共装配件有函数public DataTable ExcuteSQL(string SQLStr);

[问题]:
1.
public DataTable ExcuteSQL(OleDbCommand DBComm) 执行这个函数的时候还是出现同样错误,好像OleDbCommand对象就不能穿入.请教象这样的对象如何传到数据库服务器对象中?而 string对象就可以传入.
2.
public OleDbConnection GetDBConn() 返回的OleDbConnection是个代理对象,无法使用它做更多操作.比如上面的System.Data.OleDb.OleDbDataAdapter ada = new OleDbDataAdapter("select * from employee", obj.GetDBConn()); 请教是否可以获得这个对象?如果可以如何获得?

3Q
...全文
71 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjq_tang 2004-01-10
  • 打赏
  • 举报
回复
我对remoting理解的不够,还得看看基本的知识才行.
tjq_tang 2004-01-10
  • 打赏
  • 举报
回复
问题虽然没有解决,但是贴还是要结的.
tjq_tang 2003-12-30
  • 打赏
  • 举报
回复
To ssdjmcj8048(优游通[UUT]):
我在看....
To xlkun(cexo):
能够更深刻点?
xlkun 2003-12-30
  • 打赏
  • 举报
回复
建议你new tcpchannel
ssdjmcj8048 2003-12-29
  • 打赏
  • 举报
回复
从 .NET Framework 1.1 版开始,远程处理基础结构不会自动对服务器上的某些类型进行反序列化。如果您的方案存在这种情况,则必须先将服务器的反序列化级别设置为 Full,然后服务器才能反序列化并使用您的 MBV 对象,参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconautomaticdeserializationinnetremoting.htm
inethax 2003-12-29
  • 打赏
  • 举报
回复
up
peterlee168 2003-12-29
  • 打赏
  • 举报
回复
www.hao123.com
这里有相关文章,你可以参考一下。
tjq_tang 2003-12-29
  • 打赏
  • 举报
回复
谢 citymeteor(流星) 善意提醒
白掌柜 2003-12-29
  • 打赏
  • 举报
回复
这可是程序架构的变化,是高风险之一。
建议重新考虑,是否真的要做这么大的变化。
以前的代码可能就不能用了。
tjq_tang 2003-12-29
  • 打赏
  • 举报
回复
我原来的程序是建立的本地连接基础上,没有使用Remote方式.如果要改为remote方式,就需要获得数据库服务器上的DataConnection. citymeteor(流星)的提醒我会注意的.
如果能有比较简单的方式就好了
白掌柜 2003-12-29
  • 打赏
  • 举报
回复
另:参考IDbCommand接口
白掌柜 2003-12-29
  • 打赏
  • 举报
回复
是的,所以说是个思路问题,有没有想过把DBConnection对客户端透明?
tjq_tang 2003-12-29
  • 打赏
  • 举报
回复
To citymeteor(流星):
3Q回答, 我知道需要序列化,但是OleDbCommand 如何序列化?
还有返回的GetConnection()的对象始终是个代理对象,不能使用它做其它操作.可以使用它的属性而以
白掌柜 2003-12-29
  • 打赏
  • 举报
回复
另:如果要想传对象实际到Rmt另一端,有二个条件,一是:序列化,二是,在服务端已存在这个对象,也就是说上面的System.Data.OleDb.OleDbDataAdapter ada 在服务端必须存在。
可以用
System.Data.OleDb.OleDbDataAdapter ada = 服务端对象.GetAda();
来得到引用。而服务端要用类似
public OleDbDataAdapter GetAda()
{
return new System.Data.OleDb.OleDbDataAdapter();
}
这样的方法在服务端创建对象,将引用返回到客户端,这样才能使用。
白掌柜 2003-12-29
  • 打赏
  • 举报
回复
我想是个思路问题。
如果要做多层结构,一般来说数据库连接不会放到客户端。
数据库连接完全在服务端操作会好些。

110,501

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧