我有一个存储过程
ALTER PROCEDURE dbo.Edu_Login 

@mUserName nvarchar,
@mPwd nvarchar,
@FunctionName nvarchar
)
AS
if(@FunctionName='CheckUser')
BEGIN
update 用户信息表
set  最近登录时间=getdate()
where 用户名=@mUserName and 密码=@mPwd   
END
  RETURN
/////////////////////////////////
逻辑层是
         mCommand.Connection.Open();
mCommand.ClearParameters();
            
mCommand.StoreProdureName = "Edu_Login";
mCommand.AddParameters("@FunctionName", "CheckUser");
mCommand.AddParameters("@mUserName", aUserName);
mCommand.AddParameters("@mPwd", aPassword);            if (mCommand.ExecuteNonQuery() > 0)
            {
                mCommand.Connection.Close();
                return true;
            }
            else
            {
                mCommand.Connection.Close();
                return false;
            }
//////////////////////
底层是
        public DataTable ExecuteDataTable()
        {
            DataTable result;            SqlDataAdapter dataAdapter = null;
            try
            {
                dataAdapter = new SqlDataAdapter();
                dataAdapter.SelectCommand = mCommand;
                 result = new DataTable();
                dataAdapter.Fill(result);
            }
            catch (SqlException e)
            {
                throw (e);
            }
            finally
            {
                dataAdapter.Dispose();
            }
           
            return result;
        }
当调试的时候  mCommand.ExecuteNonQuery() 的返回值 始终是-1 这是为什么呀????
但如果用  这样执行
string aStr = "update 用户信息表 set  最近登录时间=getdate() where 用户名='"   + aUserName   + "' and 密码='" + aPassword + "' ";
            SqlCommand newCom = new SqlCommand(aStr, mCommand.Connection);
却好使   这是为什么呀??????????????

解决方案 »

  1.   

    http://www.cnblogs.com/David-Qian/archive/2009/02/12/1388488.html
      

  2.   

    @mUserName nvarchar, 
    @mPwd nvarchar, 
    @FunctionName nvarchar 没有定义长度,比如改成如下:@mUserName nvarchar(50), 
    @mPwd nvarchar(50), 
    @FunctionName nvarchar(50)这看你的定义字段的长度了。 
      

  3.   

    没有指定nvarchar的长度的时候默认是1,所以你的条件是不能成立的,找不到相应的记录。另外,觉得只有一个用户名就可以关联到了,没有必要再把密码也做为条件。
      

  4.   

    另外不要使用ExecuteNonQuery的返回值来做判断,因为ExecuteNonQuery只是返回所有语句的最后一个语句的影响记录的条件。最好有一个专用于执行是否成功的参数。可以使用存储过程的返回值,也可以再添加一个参数用于表示执行结果。
      

  5.   

    谢了  hbxtlhx  说的对  呵呵