我想根据用户想要的搜索类型显示数据源中的数据,并且没有在代码中出现任何错误。我的数据网格的名称是" Employee_Details",建议我哪里错了?
protected void btn_Search_Click(object sender, EventArgs e)
{
string search = list_Search.Text;
string constr = ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString;
SqlConnection myconnection = new SqlConnection(constr);
if(string.Compare(search,"Search By Name",true)==0)
{
try
{
myconnection.Open();
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand("SELECT * FROM Emp_Details WHERE Name='" + txt_Name.Text + "'", myconnection);
myReader = myCommand.ExecuteReader();
SqlDataAdapter da = new SqlDataAdapter(myCommand);
DataTable dt = new DataTable();
//da.Fill(dt);
//DataGrid ds = new DataGrid();
//Employee_Details.DataSource = dt;
while (myReader.Read())
{
da.Fill(dt);
Employee_Details.DataSource = dt;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
myconnection.Close();
}
}
}
答案 0 :(得分:0)
你忘了绑定网格方法.......
myconnection.Open();
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand("SELECT * FROM Emp_Details WHERE
Name='" + txt_Name.Text + "'", myconnection);
myReader = myCommand.ExecuteReader(); // it Doesn't Required
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand=myCommand ;
sda.Fill(dt);
Employee_Details.DataSource = dt;
Employee_Details.DataBind(); // You Forgot This thing
答案 1 :(得分:0)
使用SqlDataAdapter
或SqlDataReader
这两种方法都不同,请检查this。除了你这个forgor DataBind
方法。
如果您使用SqlDataAdapter
更改代码,请执行以下操作: -
SqlDataAdapter da= new SqlDataAdapter("SELECT * FROM Emp_Details WHERE Name=@Name, myconnection);
da.SelectCommand.Parameters.Add("@Name",SqlDbType.VarChar).Value = txt_Name.Text; //Change Data Type accordingly
da.Fill(dt);
Employee_Details.DataSource = dt;
Employee_Details.DataBind();
请删除与SqlDataReader
相关的所有代码。
另外,请使用using
处理昂贵的资源。考虑使用SqlParameter
来阻止Sql Injection攻击。
答案 2 :(得分:0)
while (myReader.Read())
{
da.Fill(dt);
Employee_Details.DataSource = dt;
Employee_Details.DataBind();
}