在app_code文件夹下建立一个userdataset.xsd文件,建立一个UsersTableAdapter对象,并为其建立一个adduser(@username,@userpwd,@userask,@useranswer,@useremail,@userip, @userlogincount)方法,此方法调用一个存储过程,存储过程如下:
CREATE procedure adduser
@username nvarchar(50),
@userpwd nvarchar(50),
@userask nvarchar(100),
@useranswer nvarchar(100),
@useremail nvarchar(200),
@userip nvarchar(15),
@userlogincount int
AS
declare @Count int
select @Count=Count(User_Id) from users where
User_Name=@username
if @Count=0
insert into users
(User_Name,User_Pwd,User_Ask,User_Answer,User_Email,User_Ip,User_LoginCount) valueS
(@username,@userpwd,@userask,@useranswer,@useremail,@userip,@userlogincount)
return 1
GO避免了添加名字相同的数据
C#程序中:string strip=Request.UserHostAddress;
            UserDataSetTableAdapters.UsersTableAdapter usertba =new UserDataSetTableAdapters.UsersTableAdapter();
            usertba.adduser(Tusername.Text, Tpass.Text, Task.Text, Tanswer.Text, Tmail.Text, strip, 1));但我在C#程序中怎么判断添加成功或名字相同???

解决方案 »

  1.   

    我把存储过程改为
    CREATE procedure adduser
    @userid int output,
    @username nvarchar(50),
    @userpwd nvarchar(50),
    @userask nvarchar(100),
    @useranswer nvarchar(100),
    @useremail nvarchar(200),
    @userip nvarchar(15),
    @userlogincount int
    AS
    declare @Count int
    select @Count=Count(User_Id) from users where
    User_Name=@username
    if @Count=0
    insert into users
    (User_Name,User_Pwd,User_Ask,User_Answer,User_Email,User_Ip,User_LoginCount) valueS
    (@username,@userpwd,@userask,@useranswer,@useremail,@userip,@userlogincount)
    SET @userid = @@IDENTITY
    return 1
    GO怎么在C#中怎么获得@userid
    string strip=Request.UserHostAddress;
    UserDataSetTableAdapters.UsersTableAdapter usertba =new UserDataSetTableAdapters.UsersTableAdapter();
    int userid=1;
    usertba.adduser(ref userid,Tusername.Text, Tpass.Text, Task.Text, Tanswer.Text, Tmail.Text, strip, 1));但这样总报错:
    无法将ref int转为ref int?
      

  2.   

    返回一个output参数?
    能说详细点吗?
      

  3.   

    存储过程中用 output参数,@flag int outputset @flag = 0;
    判断 如果重名 
    set @flag = 1;
    return;在外部取 这个output 参数.
      

  4.   

    问题的关键部分
    asp.net(C#)中怎么获取这个参数
      

  5.   

    就是一般的变量(int)就可以接收这个过程返回的值的..上面的兄弟说得蛮清楚了哦.
      

  6.   

    List<Class> models = new List<Class>();

    Database db = DatabaseFactory.CreateDatabase();
    string sqlCommand = "UserProcedureXXX";
    DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
    db.AddParameter(dbCommand, "@ReturnValue", DbType.Int32, 4, ParameterDirection.ReturnValue, false, 0, 0, String.Empty, DataRowVersion.Default, null);

    using (IDataReader dataReader = db.ExecuteReader(dbCommand))
    {
    while (dataReader.Read())
    {
    models.Add(PopulateFromDataReader(dataReader));
    }
    }
    totalRecords = (int)db.GetParameterValue(dbCommand, "@ReturnValue");
    return models;
      

  7.   

    大家看看我这段程序的错误string strip=Request.UserHostAddress;  //获得客户端ip
    UserDataSetTableAdapters.UsersTableAdapter usertba =new UserDataSetTableAdapters.UsersTableAdapter();    //建立一个UsersTableAdapter类的实例对象
    int userid=1;   //声明int变量
    usertba.adduser(ref userid,Tusername.Text, Tpass.Text, Task.Text, Tanswer.Text, Tmail.Text, strip, 1));  //执行usertba的方法adduser(),其中方法里使用了存储过程,userid返回参数
    =============================
    但这样总报错:
    无法将ref int转为ref int?
      

  8.   

    那你把ref 换out 看看呢
      

  9.   

    lovelacy(不会游泳的鱼:兄弟会) 
     
       问题的关键部分
    asp.net(C#)中怎么获取这个参数?
    ---------------------------------------------------  
    cmd.Parameters["参数"].Direction = ParameterDirection.Output;
    cmd.Parameters["参数"].Value //值
      

  10.   

    解决了
    在存储过程中添加一个可选择的参数@userip nvarchar(15)
    但还是没弄明白,原先为什么总报错(无法将ref int转为ref int?)CREATE procedure adduser
    @username nvarchar(50),
    @userpwd nvarchar(50),
    @userask nvarchar(100),
    @useranswer nvarchar(100),
    @useremail nvarchar(200),
    @userip nvarchar(15),
    @userlogincount int,
    @userdd nvarchar(50) output
    AS
    declare @Count int
    select @Count=Count(User_Id) from users where
    User_Name=@username
    if @Count=0
    begin
    insert into users
    (User_Name,User_Pwd,User_Ask,User_Answer,User_Email,User_Ip,User_LoginCount) valueS
    (@username,@userpwd,@userask,@useranswer,@useremail,@userip,@userlogincount)
    set @userdd='ok'
    end
    else
    begin
    set @userdd='no'
    end
    GO
      

  11.   

    报错的原因是
    System.Nullable<int> userid = new int();
    usertba.adduser(ref userid,Tusername.Text, Tpass.Text, Task.Text, Tanswer.Text, Tmail.Text, strip, 1));  
    就OK了。