0

我有2个asp页面。首先我通过登录页面登录,第二页是主页,我有一些任务的几个按钮。除此之外,我还获得了包含全名、地址、单元格编号、血组和电子邮件的用户详细信息,一旦用户使用他的用户名和密码登录,这应该动态显示在他们从数据库中的特定标签中。

我已经在 GetLoginDetails 存储过程中为此编写了查询。一旦他登录并以与我应该获取用户详细信息相同的方式进入主页,我必须显示员工姓名、他的上次登录日期、时间等。

 ALTER PROCEDURE [dbo].[GetLastLogin]

 @LoggedInUser nvarchar(50),
 @FullName nvarchar(50),
 @Address nvarchar(50),
 @MobileNumber bigint,
 @EmailID nvarchar(50),
 @BloodGroup nvarchar(50),
 @EmpName nvarchar(50)

 As

 Declare @LastLogin int

 Set @LastLogin = (Select MAX(AccessID)from dbo.ACCESS_INFO where Flag = 1)

 Select Access_Date, Access_Time from dbo.ACCESS_INFO where LoggedInUser = @LoggedInUser     and AccessID = @LastLogin

 Update dbo.EmployeeData 
 Set Empname = @EmpName
 where FullName = @FullName and Address = @Address and MobileNumber = @MobileNumber and     EmailID = @EmailID and BloodGroup = @BloodGroup ;

我收到错误提示(“程序或函数'GetLastLogin'需要参数'@FullName',未提供。”)请帮帮我

后端代码

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Username"] != null)
        {
            try
            {
                MTMSDTO objc = new MTMSDTO();

                LblLogdInUser.Text = Session["EmpName"].ToString();
                LblUser.Text = Session["Username"].ToString();


                objc.LoggedInUser = LblUser.Text;
                DataSet laslogin = obj.GetLastLogin(objc);
                DataView LasLogin = new DataView();
                LasLogin.Table = laslogin.Tables[0];
                GrdLasLogin.DataSource = LasLogin;
                GrdLasLogin.DataBind();

                if (!IsPostBack)
                {
                    int lastlog = GrdLasLogin.Rows.Count;
                    if (lastlog == 0)
                    {
                        LblLastLoginD.Text = "This is your First Login";

                        DateTime today = System.DateTime.Now.Date;
                        LblToday.Text = today.ToString();
                        LblTime.Text = System.DateTime.Now.ToLongTimeString();

                        objc.LoggedInUser = LblLogdInUser.Text;
                        objc.AccessDate = Convert.ToDateTime(LblToday.Text);
                        objc.AccessTime = Convert.ToDateTime(LblTime.Text);
                        objc.AccessStatus = "New Login";
                        objc.AccessFlag = 1;

                        int accessinfo = obj.InsertAccessInfo(objc);
                    }

                    else
                    {
                        LblLastLoginD.Text =  Convert.ToDateTime(GrdLasLogin.Rows[0].Cells[0].Text).ToString("dd/MMM/yyyy");
                        LblLastLoginT.Text = GrdLasLogin.Rows[0].Cells[1].Text;

                        DateTime today = System.DateTime.Now.Date;
                        LblToday.Text = today.ToString();
                        LblTime.Text = System.DateTime.Now.ToLongTimeString();

                        objc.LoggedInUser = LblLogdInUser.Text;
                        objc.AccessDate = Convert.ToDateTime(LblToday.Text);
                        objc.AccessTime = Convert.ToDateTime(LblTime.Text);
                        objc.AccessStatus = "New Login";
                        objc.AccessFlag = 1;

                        int accessinfo = obj.InsertAccessInfo(objc);
                    }

                    LblFname.Visible = true;
                    LblAdd.Visible = true;
                    LblMnum.Visible = true;
                    LblMailID.Visible = true;
                    LblBGroup.Visible = true;
                }
            }

            catch (Exception ex)
            {
                Response.Redirect("ERROR.aspx");
                Session.Abandon();
            }

        }

        else
        {
            Response.Redirect("~/Login.aspx");
        }

        Response.CacheControl = "no-cache";

    }
4

2 回答 2

2

错误消息清楚地表明您需要为参数提供值FullName。所以,如果你还没有这样做,那就去做吧。这里唯一的复杂之处是null价值观。astring可以null,但要指定在 ADO.NET 中需要通过DBNull.Value;如果你使用null的参数是不包含的。这意味着您最终会得到如下代码:

cmd.Parameters.AddWithValue("FullName", (object)fullName ?? DBNull.Value);

丑陋,但它的工作原理。

或者,许多辅助实用程序将为您执行此操作。所以用“精致”:

var lastAccess = conn.Query<AccessInfo>("GetLastLogin",
          new { LoggedInUser = cn, FullName = fullName, /* snipped */ },
          commandType: CommandType.StoredProcesdure).FirstOrDefault();
于 2013-06-20T12:55:34.333 回答
0

问题不在您的 SQL 中。它在你在 asp 中的调用函数中。您没有正确地将 fullname 参数发送到 SQL Server。查看此问题以获取有关如何发送参数的示例。 在c#中调用带参数的存储过程

于 2013-06-20T13:00:50.977 回答