我想根据用户想要的搜索类型显示来自数据源的数据,并且在代码中没有收到任何错误。我的数据网格的名称是"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();
}
}
}
你忘了绑定网格方法.......
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
while (myReader.Read())
{
da.Fill(dt);
Employee_Details.DataSource = dt;
Employee_Details.DataBind();
}
使用SqlDataAdapter
或SqlDataReader
它们都是不同的方法,请检查这个。除此之外,您还原谅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 注入攻击。