我正在使用 C# VS 2010 开发一个应用程序。
我有下面的代码来将带有某些名称的学生详细信息提取到数据 GridView 中。
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 @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
关于c# - 数据未进入 datagridview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828988/