日期:2014-05-20  浏览次数:20797 次

用C#跨服务器跨数据库执行 insert update 操作的问题
如题:用C#跨服务器跨数据库执行 insert update 操作的问题,当然过程中,都包含了事务,但是老是执行错误。我尝试了网页上面的大部分方法,还是不行,但是可以在本地数据库中的查询分析器中执行insert update。


--创建存储过程

create proc testremot

AS

BEGIN

insert into remot104.GameDB.dbo.account(act_name,gm,cha_ids,last_ip,disc_reason,last_leave,password,merge_state)

select act_name,gm,cha_ids,last_ip,disc_reason,last_leave,password,merge_state from dbo.account where act_id = 39

END

GO

备注:remot104 是链接服务器名称,自己在本地数据库中执行insert update delete 都可以,但在如下C#代码中执行就报错,都可以执行读取操作。

 

C#代码

SqlCommand cmdCreateAct = new SqlCommand("testremot",cn,sqltrans);

cmdCreateAct.CommandType = CommandType.StoredProcedure;

cmdCreateAct.ExecuteNonQuery(); //执行这里 提示如下错误信息

备注:testremot 存储过程名称
      cn 数据库连接对象
      sqltrans 事务对象

我用了网上的常用方法
-- 链接服务器,不同服务器数据库之间的数据操作 

-- 连接远程/局域网数据(openrowset/openquery/opendatasource)   都尝试过了,最后总结出来的是,读取远程数据库中的数据可以,但是不能执行 insert、update、delete 操作。请问是怎么回事。

其中网上说的 双方 MSDTC 、135、SET XACT_ABORT = ON 我都设置了,当我把代码中的事务去掉,就可以执行 insert操作了,为什么,求碰到此问题的人,指点一下,在此感谢。


------解决方案--------------------
读取远程数据库中的数据可以,但是不能执行 insert、update、delete 操作。

那就是你这个访问数据库的用户只有查询权限,没有增删改权限了,换个高权限的账户,或者赋予你现在的这个账户增删改权限。
------解决方案--------------------
原来是权限的问题。。

引用:
读取远程数据库中的数据可以,但是不能执行 insert、update、delete 操作。

那就是你这个访问数据库的用户只有查询权限,没有增删改权限了,换个高权限的账户,或者赋予你现在的这个账户增删改权限。

------解决方案--------------------
没试过,帮你顶一个