首页 新闻 会员 周边 捐助

ADO.NET问题 急等

0
悬赏园豆:20 [已关闭问题]
<P><BR>一个很奇怪的问题,将存储过程中的参数的顺序变了之后,存储的数据库中的数据的值也变了<BR>有谁能告诉我这是为什么??非常急!!<BR>public void SavePersonToPosition(DataSet TempDataSet)<BR>{&nbsp; TempDataSet.Tables[0].Columns.Remove("abc");<BR>&nbsp;&nbsp;&nbsp; //人员功能表中没有该字段,我将他从TempDataSet中移出<BR>&nbsp;&nbsp; //自己写的用企业库访问数据库的方法<BR>&nbsp;&nbsp; SaveDataSetByStorageProcess(strConn, TempDataSet, "ID", PositionPersonMap_ADD",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P> <P>&nbsp; "PositionPersonMap_Delete", "PositionPersonMap_Update", strClientIP);<BR>&nbsp;&nbsp; //传人的TempDataSet .Table[0]中 PositionID = 11&nbsp; PersonID =22<BR>}</P> <P>//存储过程<BR>CREATE PROCEDURE PositionPersonMap_ADD<BR>@PositionID varchar(32),<BR>@PersonID varchar(32)&nbsp; AS <BR>INSERT INTO&nbsp;&nbsp; PositionPersonMap([ID],[PositionID],[PersonID])<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUES(@ID,@PositionID,@PersonID)&nbsp;&nbsp; GO<BR>//存入数据库中的 PositionID = 11&nbsp; PersonID =22</P> <P>//如果将参数的顺序换为<BR>@PersonID varchar(32),<BR>@PositionID varchar(32)<BR>//存入数据库中的 PositionID = 22&nbsp; PersonID =11</P> <P>有那位大侠能告诉我这是为什么????</P> <P>&nbsp;</P>
<光之翼>的主页 <光之翼> | 初学一级 | 园豆:200
提问于:2008-02-24 15:32
< >
分享
其他回答(2)
0
这个问题我也遇见过的.所以你要在传参的时候要和存储过程中参数的顺序一致,因为它们都是字符串类型的,两个都可以接收,你写反了所以它接收的时候是按顺序,而不是按名字.
侯垒 | 园豆:3435 (老鸟四级) | 2008-02-24 17:50
0
CREATE PROCEDURE PositionPersonMap_ADD @ID varchar(10), @PositionID varchar(32), @PersonID varchar(32) AS INSERT INTO PositionPersonMap([ID],[PositionID],[PersonID]) VALUES(@ID,@PositionID,@PersonID) 你这里少写了@ID这个参数了吧.没有这个参数,会报错的.因为你后面用到了这个参数,至于你说的存储数据顺序问题,看下面的源代码: use TestDB create table PositionPersonMap ( ID varchar(10), PositionID varchar(32), PersonID varchar(32) ) select * from Test PositionPersonMap_ADD '1','2','3' CREATE PROCEDURE PositionPersonMap_ADD @ID varchar(10), @PositionID varchar(32), @PersonID varchar(32) AS INSERT INTO PositionPersonMap([ID],[PositionID],[PersonID]) VALUES(@ID,@PositionID,@PersonID) drop procedure PositionPersonMap_ADD 当你执行了存储过程后,表里的数据是 1,2,3 当你把@PersonID varchar(32),@PositionID varchar(32)交换后,再次执行,表里的数据是 1,3,2 显而易见,数据库是根据参数类分配的.你把参数位置换了,数据自然也就交换了位置,它并不是根据,前后对应的策略;如:@PersonID 对应[PositionID],@PersonID 对应,[PersonID],而是[ID],[PositionID],[PersonID]和@ID,@PositionID,@PersonID一一相互对应,前面第一和后面第一个对应,前面第二个和后面第二个对应,同理,第三个. 其实这个和 INSERT INTO PositionPersonMap([ID],[PositionID],[PersonID]) VALUES ('1','2','3') INSERT INTO PositionPersonMap([ID],[PositionID],[PersonID]) VALUES ('1','3','2') 是一样的理论,一样的结果; 希望能帮上什么忙.
MartinGao | 园豆:663 (小虾三级) | 2008-02-24 20:45
0
SaveDataSetByStorageProcess的问题吧? SQL的参数化查询可以根据参数名来赋值,ACCESS的参数顺序与赋值顺序必须一至
PENGHAO-X | 园豆:20 (初学一级) | 2008-02-27 12:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册