如何通过userid选择和显示记录?

时间:2014-11-30 16:15:46

标签: c# asp.net

我有一个销售页面,用户可以在其中搜索并显示其客户的记录。我有多个用户打算使用此页面。我的问题是如何以一种方式创建页面,当用户登录时,它只会通过他或她的Userid显示用户的记录。

我在下面应用了您的示例:

if(!IsPostBack)
    {
        Session["UserId"] = User.Identity.Name;

        // using (var connection = new SqlConnection("mtbase"))
        {

            string value = null;
            if (HttpContext.Current.User != null)
            {
                value = HttpContext.Current.User.Identity.Name;
            }
            else
            {
                value = HttpContext.Current.Request.LogonUserIdentity.Name;
            }
            var split = value.Split(new char[] { '\\' });
            var UserId = split[split.Length - 1];
            using (var cmd = new SqlCommand("SELECT * FROM FixPrice WHERE UserId=@UserId", new SqlConnection("mtbase")))
            {
                // Add your parameter before opening the connection
                cmd.Parameters.AddWithValue("@UserId", UserId);
                // Open connection
                cmd.Connection.Open();
                using (var reader = cmd.ExecuteReader())
                {

                }
                cmd.Connection.Close();
            }
        }
    }
}

我的数据库表:

表名FixPrice

Id int(PRIMARY KEY)

日期数据时间

Admin nvarchar

类别nvarchar

品牌varchar

价钱

数量浮动

总结钱

UserId int(FOREIGN KEY)

我仍然得到同样的错误:

初始化字符串的格式不符合从索引0开始的规范。

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:初始化字符串的格式不符合从索引0开始的规范。

来源错误:

第31行:var split = value.Split(new char [] {' \'}); 第32行:var UserId = split [split.Length - 1]; 第33行:使用(var cmd = new SqlCommand(" SELECT * FROM FixPrice WHERE UserId = @ UserId&#34 ;, new SqlConnection(" Skyformatbase"))) 第34行:{ 第35行://在打开连接之前添加参数

源文件:c:\ Users \ migold \ Documents \ Visual Studio 2013 \ WebSites \ SKYAPP \ DashBoard.aspx.cs Line:33

2 个答案:

答案 0 :(得分:1)

让我们首先关注这一点:

         var query = "SELECT * FROM FixPrice WHERE UserName @Username";
         using (var command = new SqlCommand(query, connection))
         {
            // Open connection
            connection.Open();
            // Add your parameter 
            command.Parameters.AddWithValue("@Username", User.Identity.Name);
            using (var reader = command.ExecuteReader())

您的SQL需要说SELECT * FROM FixPrice WHERE UserName=@Username;

您不使用 =(等于)符号。

接下来,您正在阅读用户的名称,而不是用户的用户名

然后,当然,你没有在任何地方关闭你的连接。它可以用这种形式简化:

      string value = null;
      if (HttpContext.Current.User != null) {
        value = HttpContext.Current.User.Identity.Name;
      } else {
        value = HttpContext.Current.Request.LogonUserIdentity.Name;
      }
      var split = value.Split(new char[] { '\\' });
      var userName = split[split.Length - 1];
      using (var cmd = new SqlCommand("SELECT * FROM FixPrice WHERE UserName=@UserName", new SqlConnection("mtbase")))
      {
         // Add your parameter before opening the connection
         cmd.Parameters.AddWithValue("@UserName", userName);
         // Open connection
         cmd.Connection.Open();
         using (var reader = cmd.ExecuteReader()) {
            ...
         }
         cmd.Connection.Close();
      }

我希望这有助于您走上正轨。

答案 1 :(得分:-1)

您可以将所有代码放在该页面的page_load事件中。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
     //  Response.Write("<br>Page has been loaded first time.");
     //Read the user ID from session , asp.net membership or identity.
    // call database functions to read the record respect to that user and bind the 
list view , grid


    }
}