在网格视图中显示SQL Server数据库值,显示错误

本文关键字:显示 数据库 错误 Server SQL 网格 视图 | 更新日期: 2023-09-27 18:25:54

当我试图在网格视图中显示数据库值时,我会得到一个错误:

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];
}

在网格视图中显示SQL Server数据库值,显示错误

使用sql参数,这可能解决了这个问题,也防止了未来的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,您应该相应地解析它们(int.Parse(home.cboxdept.SelectedValue ))。

此处缺少调用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

`