-4

我正在尝试使用参数化查询显示数据

try
{
 SqlConnection xconn = new SqlConnection();
 xconn.ConnectionString = @" Data Source=servername; Database=master; Trusted_Connection=yes ";
 xconn.Open();
 SqlCommand ycmd = new SqlCommand ("select * from tablename where column1 = @name", xconn);
 ycmd.Parameters.Add("@name", dropdownlist.SelectedValue);
 SqlDataAdapter da = new SqlDataAdapter(s,xconn);
 SqlCommandBuilder cmdbuilder  = new SqlCommandBuilder(da);

 DataTable dt = new DataTable();
 da.Fill(dt);
 gridview.DataSource = dt;
 gridview.DataBind();
}
catch(Exception ex)
{
  label.Text = ex.Message + "\n" + ex.StackTrace;
 }

我如何让它工作?

4

1 回答 1

4

尝试这个:

try 
{ 
 SqlConnection xconn = new SqlConnection(); 
 xconn.ConnectionString = @" Data Source=servername; Database=master; Trusted_Connection=yes";
 SqlCommand ycmd = new SqlCommand ("select * from tablename where column1 = @name", xconn); 
 ycmd.Parameters.Add("@name", dropdownlist.SelectedValue); 
 SqlDataAdapter da = new SqlDataAdapter(ycmd);

 DataTable dt = new DataTable(); 
 da.Fill(dt); 
 gridview.DataSource = dt; 
 gridview.DataBind(); 
} 
catch(Exception ex) 
{ 
  label.Text = ex.Message + "\n" + ex.StackTrace; 
}

使用该方法SqlConnection.Open()时无需调用。SqlDataAdapter.Fill()在该方法中,它打开连接并在完成时处理/关闭它。(这不是问题,仅供参考)

您创建的方式SqlDataAdapter是问题所在。您没有使用SqlCommand作为构造函数创建它,只是使用命令文本。因此,您没有传入SqlCommand类中指定的参数。

让我知道这是否有效。如果这不起作用,请尝试在 SSMS 中手动运行此查询,以确保它实际返回结果集。另外,请确保您的ListControl.SelectedValue财产包含一些东西。通过调试和分析那里存储的内容来做到这一点。

于 2011-11-03T14:46:11.400 回答