1

尽管此存储过程在第一次(首次登录)和注销后或重新运行应用程序后有效,但此存储过程不起作用并抛出“Procedure or function checkLogin11 has too many arguments specified exception”。我只提供所需的参数,它第一次工作正常,然后就不行了。无法理解有什么问题。请建议我该怎么做。

存储过程:

CREATE PROCEDURE checkLogin11
@userName nvarchar(50) = null,
@userPassword nvarchar(50) = null,
@userType nvarchar(50) = null
AS
BEGIN

SET NOCOUNT ON;

SELECT lu.LoginID  FROM arstbl_LoginUser as lu WHERE lu.UserName = @userName AND lu.Password = @userPassword AND lu.Type = @userType
END
GO

代码:

scmd.Connection = scon;
scmd.CommandType = CommandType.StoredProcedure;
scmd.CommandText = "checkLogin11";
scmd.Parameters.Add("@userName", SqlDbType.NVarChar).Value = userName;
scmd.Parameters.Add("@userPassword", SqlDbType.NVarChar).Value = password;
scmd.Parameters.Add("@userType", SqlDbType.NVarChar).Value = userType;

SqlDataAdapter sda = new SqlDataAdapter(scmd);
DataTable dt = new DataTable();

try
  {
     scon.Open();
     sda.Fill(dt);

     if (dt.Rows.Count > 0)
        return true;
     else
     return false;
  }

finally
  {
     scon.Close();
  }

它在填充数据表时抛出异常。

谢谢你。

4

1 回答 1

1

您必须在其他函数中使用了相同的命令对象(scmd),否则可能会出现事件冒泡。在执行语句之前尝试清除参数(scmd.Parameters.Clear())

scmd.Connection = scon;
scmd.CommandType = CommandType.StoredProcedure;
scmd.CommandText = "checkLogin11";

**scmd.Parameters.Clear();**

scmd.Parameters.Add("@userName", SqlDbType.NVarChar).Value = userName;
scmd.Parameters.Add("@userPassword", SqlDbType.NVarChar).Value = password;
scmd.Parameters.Add("@userType", SqlDbType.NVarChar).Value = userType;

SqlDataAdapter sda = new SqlDataAdapter(scmd);
DataTable dt = new DataTable();

try
  {
     scon.Open();
     sda.Fill(dt);

     if (dt.Rows.Count > 0)
        return true;
     else
     return false;
  }

finally
  {
     scon.Close();
  }
于 2013-07-21T06:11:37.947 回答