C# 数据未进入datagridview

C# 数据未进入datagridview,c#,sql,sql-server,datagridview,C#,Sql,Sql Server,Datagridview,我正在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'

我正在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];
我的问题是我只是得到了表格的标题,而不是下面截图中的数据。


这里怎么了?

我想你应该在打开
%
之后和关闭
%
之前放下
'

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
部分的格式应为
类似“%somename%”

另外,使用construct将SqlConnection包装为
,这样您就永远不会忘记处理它(即使在抛出异常时)

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

我建议使用参数化查询

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语句的引号和通配符的字符串串联问题就大大简化了,并且可以避免细微的错误,例如
%
字符周围的引号错误

当然,这消除了任何可能的错误