0

我有以下一段代码。SQL 查询返回两行值。但是,当我涉及该方法时cmd.ExecuteReader();,应用程序仅返回第一行值。

我该如何解决这个问题?方法有问题吗cmd.Parameters.AddWithValue?请帮忙!

sqlQuery = "select name, data,data2 from surgicalfiledemo where id = '2'";
SqlCommand cmd = new SqlCommand(sqlQuery, con);
cmd.Parameters.AddWithValue("id", surgicalGridView.SelectedRow.Cells[1].Text);

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())
{
   HttpContext.Current.Response.ClearContent();
   HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + dr["name"].ToString() + ".xls");
   HttpContext.Current.Response.ContentType = "application/excel";
   Response.Charset = "";
   Response.Cache.SetCacheability(HttpCacheability.NoCache);
   Response.Write(dr["data"] + "\t");
   Response.Write(dr["data2"] + "\t");
   Response.End();
}
4

1 回答 1

1

如果您使用命令参数,则必须@在查询中使用参数:更改Id='2'Id=@Idthen 并在添加值"id"时将其更改为@Id.

尝试这个:

sqlQuery = "select name, data,data2 from surgicalfiledemo where id = @id";
SqlCommand cmd = new SqlCommand(sqlQuery, con);
cmd.Parameters.AddWithValue("@id", surgicalGridView.SelectedRow.Cells[1].Text);

//SqlDataReader dr = cmd.ExecuteReader(); use sqldata adapter to load all the data then fill to to Datatable and Bind it on GridView
SqlDataAdapter adapt = new SqlDataAdapter();
DataTable dt = new DataTable();
adapt.SelectCommand = cmd;
adapt.Fill(dt);
GridView GridView1 = new  GridView();
GridView1.DataSource = dt;
GridView1.DataBind();

// if (dr.Read()) {  .. }  this causes you to return single record only, your export to excel execute every time a row was read thats why you can only see one record.

Response.Clear();
Response.Buffer = true;
string filename="MyExportedData.xls"; 
Response.AddHeader("content-disposition","attachment;filename="+filename);
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.RenderControl(hw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

检查此链接:ASP.NET:将网格视图导出到 Excel

此致

于 2013-03-18T01:07:12.720 回答