【问题标题】:Trying to get database entries limited to current UserName试图将数据库条目限制为当前用户名
【发布时间】:2014-05-23 15:05:01
【问题描述】:

我使用上传文件的人的用户名更新数据库,并尝试仅检索当前用户上传的文件,以显示在 gridview 中。

页面显示当前用户名,当该人上传文件时,一切正常。虽然当该用户点击搜索按钮时,所有记录都会显示并且我收到错误:

错误:列名“测试”无效

  protected void ButtonSearch_Click(object sender, EventArgs e)
{
    GridView1.Visible = true;

    try
    {
        string UN = Session["New"].ToString();
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);


        SqlDataReader reader;
        SqlCommand command = new SqlCommand();
        command.CommandText = "SELECT * FROM UserUpload WHERE UserName = @un";
        command.Parameters.Add(new SqlParameter("@un", UN));
        command.Connection = conn;

        conn.Open();

            reader = command.ExecuteReader();

                    GridView1.DataSource = reader;
                    GridView1.DataBind();

        conn.Close();

        }

    catch (Exception ex)
    {

        LabelMessage.Text = ("Error:" + ex.Message);

    }
}

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    改变这一行

    string UserSearch = "SELECT * FROM UserUpload WHERE UserName =" + UN;
    

    到

    string UserSearch = string.Format("SELECT * FROM UserUpload WHERE UserName ='{0}'",UN);
    

    您想与用户名匹配,因为字符串字符串在 SQL 中被包装在 '' 中
    如果您要按数字匹配,则可以正常工作,因为数字没有此要求。

    更新到更新: 改成这样的(未测试)

    SqlCommand com = new SqlCommand(UserSearch, conn);
    
        {   DataSet ds = com.ExecuteReader();
            if (ds.Tables.Count > 0)
            {
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
                conn.Close();
        }
    

    阅读this会受益匪浅

    【讨论】:

    • 谢谢,这纠正了错误,尽管 gridview 仍然显示所有记录,无论用户名如何
    • 我将代码更改为您建议的内容,尽管 gridview 仍然显示所有条目
    • 您需要对从数据库中读取的数据进行数据绑定。 stackoverflow.com/questions/6358799/…
    • 更新了原帖,没有错误,但是gridview没有出现
    【解决方案2】:

    使用参数而不是将值分配给查询字符串

        protected void ButtonSearch_Click(object sender, EventArgs e)
        {
            GridView1.Visible = true;
            try
            {
                string UN = Session["New"].ToString(); ;
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
                conn.Open();
                string UserSearch = "SELECT * FROM UserUpload WHERE UserName = @un";
                SqlCommand com = new SqlCommand(UserSearch, conn);
                com.Parameters.Add(new SqlParameter("@un", UN));
    
                com.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception ex)
            {
    
                LabelMessage.Text = ("Error:" + ex.Message);
    
            }
        }
    

    【讨论】:

    • 将我的代码更改为这个后,gridview 仍然显示所有条目。
    • 然后用数据库工具试试这个语句,例如SQL Management Studio 并查看结果。您的查询可能有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2013-07-31
    • 2019-04-25
    • 2018-11-12
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多