悬赏分:20 浏览:504 次
一个很奇怪的问题,将存储过程中的参数的顺序变了之后,存储的数据库中的数据的值也变了
有谁能告诉我这是为什么??非常急!!
public void SavePersonToPosition(DataSet TempDataSet)
{ TempDataSet.Tables[0].Columns.Remove("abc");
//人员功能表中没有该字段,我将他从TempDataSet中移出
//自己写的用企业库访问数据库的方法
SaveDataSetByStorageProcess(strConn, TempDataSet, "ID", PositionPersonMap_ADD",
"PositionPersonMap_Delete", "PositionPersonMap_Update", strClientIP);
//传人的TempDataSet .Table[0]中 PositionID = 11 PersonID =22
}
//存储过程
CREATE PROCEDURE PositionPersonMap_ADD
@PositionID varchar(32),
@PersonID varchar(32) AS
INSERT INTO PositionPersonMap([ID],[PositionID],[PersonID])
VALUES(@ID,@PositionID,@PersonID) GO
//存入数据库中的 PositionID = 11 PersonID =22
//如果将参数的顺序换为
@PersonID varchar(32),
@PositionID varchar(32)
//存入数据库中的 PositionID = 22 PersonID =11
有那位大侠能告诉我这是为什么????
|
这个问题我也遇见过的.所以你要在传参的时候要和存储过程中参数的顺序一致,因为它们都是字符串类型的,两个都可以接收,你写反了所以它接收的时候是按顺序,而不是按名字. 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') 是一样的理论,一样的结果; 希望能帮上什么忙. SaveDataSetByStorageProcess的问题吧? SQL的参数化查询可以根据参数名来赋值,ACCESS的参数顺序与赋值顺序必须一至 |