【问题标题】:Data not getting in datagridview数据未进入 datagridview
【发布时间】:2014-01-16 17:10:47
【问题描述】:

我正在用 C# VS 2010 开发一个应用程序。

我有下面的代码来获取带有某个名称的学生详细信息到 datagridview 中。

var CommandText = @"SELECT sid as 'Student ID', name as 'Student Name', adDate as 
                  'Admission Date',
               paidFees as 'Fees Paid', balance as 'Fees Remaining'
                   FROM Student WHERE (status = '" + status + "') AND 
                   (name LIKE '%'+'"+txtSearchName.Text.Trim() + "'+'%')";
string select = CommandText;
            con.Open();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(select, con); 

            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
            DataSet ds = new DataSet();
            dataAdapter.Fill(ds);
            con.Close();
            dgvSearch.ReadOnly = true;
            dgvSearch.DataSource = ds.Tables[0];

我的问题是我只是得到表格的标题而不是像下面的屏幕截图那样的数据。

这里有什么问题?

【问题讨论】:

    标签: c# sql sql-server datagridview


    【解决方案1】:

    我建议使用参数化查询。

    var CommandText = @"SELECT sid as 'Student ID', name as 'Student Name', adDate as 
                      'Admission Date', paidFees as 'Fees Paid', balance as 'Fees Remaining'
                       FROM Student WHERE (status = @status) AND (name LIKE @stuname)";
    string select = CommandText;
    con.Open();
    SqlDataAdapter dataAdapter = new SqlDataAdapter(select, con); 
    dataAdapter.SelectCommand.Parameters.AddWithValue("@status", status);
    dataAdapter.SelectCommand.Parameters.AddWithValue("@stuname", "%" + txtSearchName.Text.Trim() + "%");
    SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
    DataSet ds = new DataSet();
    dataAdapter.Fill(ds);
    ....
    

    通过这种方式,LIKE 语句的引号和通配符的字符串连接问题得到了极大的简化,并且您避免了诸如 % 字符周围的错误引号之类的细微错误。

    当然,这会删除任何可能的SQL Injection attack

    【讨论】:

      【解决方案2】:

      我认为你应该在打开 % 之后关闭 % 之前删除 '。

      var CommandText = @"SELECT sid as 'Student ID', name as 'Student Name', adDate as 
                    'Admission Date',
                    paidFees as 'Fees Paid', balance as 'Fees Remaining'
                    FROM Student WHERE (status = '" + status + @"') AND 
                    (name LIKE '%" + name + "%')";
      

      LIKE 部分的格式应为LIKE '%somename%'。

      我们的好习惯是用using 构造包装SqlConnection,这样您就永远不会忘记处理它(即使抛出异常。

      using (var conn = new SqlConnection(...))
      {
      }
      

      【讨论】:

        猜你喜欢
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 2012-08-09
        • 1970-01-01
        相关资源
        最近更新 更多