我在数据库中建立了两个表,结构如下
Userinfo表:
Userid      username       pwd       roleid
Roleinfo表:
Roleid      rolename
同时建立了一个存储过程用于插入一条新的用户信息:
CREATE PROCEDURE userIns 
@UserId nvarchar(10),
@UserName nvarchar(10),
@Pwd nvarchar(15),
@RoleName nvarchar(10),
@RoleId nvarchar(10) 
as
select @RoleId = RoleId from roleinfo where RoleName = @RoleName
insert into userinfo values(@UserId, @UserName, @Pwd, @RoleId)
GO
在程序中通过userinfo和roleinfo关联,生成dataset中的一个表userrole(userid,username,pwd,rolename)
在用户界面上,用户可以通过输入userid,username,pwd,rolename(不是roleid)来新建一个用户。
程序内部的实现过程如下:
1、 用户输入新的用户信息后,dataset.userrole中增加了一行新的数据
2、 当用户选择保存后,调用dataset相对应的DataAdapter的update()方法
3、 调用update()方法后,DataAdapter找到为它所定义的insert语句,也就是上面所定义的存储过程
为什么我每次执行到这里就会出错了,各位大虾指教一下了。
以下是程序的片断:
1、定义DataAdapter的insert语句
this.userInsCmd = new System.Data.SqlClient.SqlCommand();
userInsCmd.Connection = LoginFrm.m_sqlConn;
userInsCmd.CommandType = System.Data.CommandType.StoredProcedure;
userInsCmd.CommandText = "userins";
this.userInsCmd.Parameters.Add(new 
System.Data.SqlClient.SqlParameter("@UserId",System.Data.SqlDbType.NVarChar,10,"UserId"));
this.userInsCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@UserName",System.Data.SqlDbType.NVarChar,10,"UserName"));
this.userInsCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Pwd",System.Data.SqlDbType.NVarChar,15,"Pwd"));
this.userInsCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RoleName",System.Data.SqlDbType.NVarChar,10,"RoleName"));
this.userInsCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RoleId", System.Data.SqlDbType.NVarChar, 10, System.Data.ParameterDirection.ReturnValue, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
userDa.InsertCommand = userInsCmd;2、当dataset产生了新记录后,执行如下:
userDa.Update(userDs, "userrole");

解决方案 »

  1.   

    userDa is a dataset?
    I do not like dataset, I think you can update database by sql statement
      

  2.   

    好麻烦,直接用微软的Sqlhelper做这些操作,比较方便。!
      

  3.   

    第一,使用DataAdapter更新时记得需要健列信息(一般是指主健);第二,使用DataAdapter是需要InsertCommand、DeleteCommand、UpdateCommand(好象)。你可以用拉控件的方式拉一个DataAdapter1出来看看(IDE自动生成的代码)