-- 建立一个存储过程.
Create Procedure InfoInsert
@Name        nvarchar(50), 
@Password      nvarchar(50), 
@Age         bigint,
@Sex           nvarchar(50), 
@Email        nvarchar(50) As --检查用户名是否被注册过
If exists(select * from [User] Where [User_Name]=@Name)Return Insert into [User]([User_Name],User_PassWord) Values(@Name,@Password)--查询出刚刚插入的用户名的ID
Declare @userId  int
Select @userid=Max([User_ID]) from [User]--像INFO表插入详细信息
Insert into Info([User_ID],User_Age,User_Sex,User_Email) 
Values(@userid,@age,@sex,@Email) GO
代码如下:
sqlCon1.Open(); 
// string sql="[Call InfoInsert(?)]";
// System.Data.SqlClient.SqlCommand cmd = new SqlCommand(sql,sqlCon1);
// cmd.CommandType=CommandType.Text;
System.Data.SqlClient.SqlCommand cmd = new SqlCommand();
cmd.CommandType=CommandType.StoredProcedure;
cmd.Connection=sqlCon1;
cmd.CommandText="InfoInsert"; cmd.Parameters.Add("@Name",SqlDbType.NVarChar,50);
cmd.Parameters.Add("@Password",SqlDbType.NVarChar,50);
cmd.Parameters.Add("@Age",SqlDbType.BigInt);
cmd.Parameters.Add("@Sex",SqlDbType.NVarChar,50);
cmd.Parameters.Add("@Email",SqlDbType.NVarChar,50);

cmd.Parameters[0].Value =txtName.Text.Trim(); 
cmd.Parameters[1].Value =txtPass1.Text.Trim();
cmd.Parameters[2].Value =txtAge.Text.Trim();
cmd.Parameters[3].Value =txtSex.SelectedItem.Text.Trim();
cmd.Parameters[4].Value =txtEmail.Text.Trim();
    cmd.ExecuteNonQuery(); //记录执行所影响的行数.
    int ReturnNum =cmd.ExecuteNonQuery(); 

if (ReturnNum > 0)
{
//插入成功 
Response.Write("祝贺你插入成功.");
}
else
{
WebPu.ErrNumber ="此用户名已经被注册过了!请换一个用户名.";
Server.Transfer("MyError.aspx"); 
//插入失败,该用户已经注册过.
}插入记录也成功了 为什么还是返回-1呢 郁闷.
'还有个问题是,我注释的那段代码为什么总提示 "[Call InfoInsert(?)]" 附近有语法错误.

解决方案 »

  1.   

    ExecuteNonQuery 不返回任何行,映射到参数的任何输出参数或返回值都会用数据进行填充。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1。
      

  2.   

    你用的是cmd.ExecuteNonQuery
    这本来就是不返回值的啊.
      

  3.   

    备注
    您可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
      

  4.   

    '还有个问题是,我注释的那段代码为什么总提示 "[Call InfoInsert(?)]" 附近有语法错误
    这个问题???????怎么解决??
      

  5.   

    他执行的是一个多条的sql,所以返回的值永远都是-1
      

  6.   

    '还有个问题是,我注释的那段代码为什么总提示 "[Call InfoInsert(?)]" 附近有语法错误
    --------------------------------------
    我把它放到程序中,怎么不报错呀!
      

  7.   

    我觉得你写的代码有问题啊,你是用存储过程的,
    又怎么用cmd.CommandType=CommandType.Text;呢?
    随便去哪找一段调用存储过程的代码套用一下了.
      

  8.   

    //我觉得你写的代码有问题啊,你是用存储过程的,
    //又怎么用cmd.CommandType=CommandType.Text;呢?
    //随便去哪找一段调用存储过程的代码套用一下了.请仔细阅完代码再加以评论。
      

  9.   

    在SQL里执行一下代码看看有没有错