在显示错误的 Gridview 中显示 SQL Server 数据库值
Posted
技术标签:
【中文标题】在显示错误的 Gridview 中显示 SQL Server 数据库值【英文标题】:Displaying SQL Server database value in Gridview showing error 【发布时间】:2014-10-08 14:36:23 【问题描述】:当我尝试在网格视图中显示数据库值时出现错误:
System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常
附加信息:关键字“and”附近的语法不正确。
代码是
private void button1_Click(object sender, EventArgs e)
SqlDataAdapter adap;
DataSet ds;
SqlConnection cn = new SqlConnection(
@"Data Source=DILIPWIN\SQLEXPRESS;Initial Catalog=radb;Integrated Security=True");
cn.Open();
var home = new Home();
adap = new SqlDataAdapter(
"select roll_num, mark from marks where mark < 50 and dept_id=" +
home.cboxDept.SelectedValue + " and sem_id=" + home.cboxSem.SelectedValue +
" and subject_id=" + home.cboxSubject.SelectedValue + " and batch_id= " +
home.cboxBatch.SelectedValue + " and cls_id=" + home.cboxClass.SelectedValue, cn);
ds = new System.Data.DataSet();
adap.Fill(ds, "dataGridView1");
dataGridView1.DataSource = ds.Tables[0];
【问题讨论】:
你能在所有连接后发布查询吗? 我假设您正在使用 WinForms 并且实际上正在使用 DataGridView?请始终适当地标记,否则你会浪费 WPF 人的时间! (反之亦然..) 【参考方案1】:使用 sql-parameters 可能会解决此问题并防止未来的 sql 注入问题:
string sql = @"
SELECT roll_num,
mark
FROM marks
WHERE mark < 50
AND dept_id=@dept_id
AND sem_id=@sem_id
AND subject_id=@subject_id
AND batch_id=@batch_id
AND cls_id=@cls_id;";
DataSet ds = new DataSet();
using(var cn = new SqlConnection(@"Data Source=DILIPWIN\SQLEXPRESS;Initial Catalog=radb;Integrated Security=True"))
using (var da = new SqlDataAdapter(sql, cn))
da.SelectCommand.Parameters.AddWithValue("@dept_id", home.cboxDept.SelectedValue );
da.SelectCommand.Parameters.AddWithValue("@sem_id", home.cboxSem.SelectedValue );
da.SelectCommand.Parameters.AddWithValue("@subject_id", home.cboxSubject.SelectedValue );
da.SelectCommand.Parameters.AddWithValue("@batch_id", home.cboxBatch.SelectedValue );
da.SelectCommand.Parameters.AddWithValue("@cls_id", home.cboxClass.SelectedValue );
da.Fill(ds); // you don't need to open/close the connection with Fill
dataGridView1.DataSource = ds.Tables[0];
您还应该使用正确的类型。 AddWithValue
将尝试从值推断类型。因此,如果这些是 int
s,您应该相应地解析它们 (int.Parse(home.cboxdept.SelectedValue )
)。
【讨论】:
【参考方案2】:此处缺少调用databind方法。使用以下代码:
GridView1.DataBind();//This line is missing in your code`
试试下面的格式
DataAdapter adapter=new DataAdapter(SqlCommand,SqlConn);
DataTable tbl=new Datatable();
adapter.Fill(tbl);
GridView1.DataSource=tbl;
GridView1.DataBind();//This line is missing in your code
`
【讨论】:
“关键字'and'附近的语法不正确。”它也是winforms而不是webforms。以上是关于在显示错误的 Gridview 中显示 SQL Server 数据库值的主要内容,如果未能解决你的问题,请参考以下文章
用于获取重复记录并在 Gridview 中显示为一行的 SQL 查询
如何使用 linq2sql 在单个 gridview 或 gridpanel 中显示来自多个表的数据?