Прямо сейчас мой код экспортирует все столбцы, которые он выполняет для запроса в файл excel. Выполняемые SQL-команды находятся в хранимых процедурах. Я хочу иметь возможность указать, какие столбцы из SQL-данных я хочу экспортировать.C# - Нужны идеи по выполнению SQL и экспорт в excel
Один из методов, о котором я думаю, заключается в том, чтобы пользователь мог выбрать то, что они хотят, и объединить их в SQL-запрос, а не использовать команды в хранимой процедуре.
Я также попытался поместить параметры в хранимые процедуры внутри области выбора, считая, что было бы просто иметь параметры в поле выбора, но из того, что я понимаю до сих пор, является то, что он не допускается из-за возможности SQL инъекции.
Я видел несколько примеров использования DataSet и DataTables для хранения данных SQL, но затем экспортировал все это в excel. Но если вы используете его таким образом, вам не понадобится куча условных операторов для проверки перед тем, как вывести этот столбец?
Есть ли другие методы? Код, указанный ниже, просто для того, чтобы показать, что я делаю до сих пор.
private SqlDataSource GetDataSource(string FruitType)
{
SqlDataSource tempDataSource = new SqlDataSource();
tempDataSource.ConnectionString = ConfigurationManager.ConnectionStrings["ServerConnectionString"].ToString();
tempDataSource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
switch (ReportType)
{
case "Oranges":
tempDataSource.SelectCommand = "getOrange";
break;
case "Apples":
tempDataSource.SelectCommand = "getApples";
break;
case "Pineapples":
tempDataSource.SelectCommand = "getPineapples";
break;
case "Watermelons":
tempDataSource.SelectCommand = "getWatermelons";
break;
case "GrapeFruit":
tempDataSource.SelectCommand = "getGrapeFruit";
break;
}
tempDataSource.DataBind();
return tempDataSource;
}
protected void btnSaveData(object sender, EventArgs e)
{
string attachment = "attachment; filename=";
attachment += "Fruit Data";
attachment += ".xls";
Response.ClearContent();
Response.Charset = "";
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView gvTemp = new GridView();
gvTemp.Attributes["runat"] = "server";
SqlDataSource ds = GetDataSource(FruitType);
gvTemp.DataSource = ds;
gvTemp.DataBind();
gvTemp.RenderControl(htw);
Page.Controls.Add(gvTemp);
Response.Write(sw.ToString());
Response.End();
}
Несколько вопросов, но когда я помещаю свои переменные в параметр столбцов, они должны быть в формате sql уже? Например, «col name1, col name2» Кроме того, почему вы должны вставить его в другую таблицу после выбора столбцов из таблицы, чтобы выбрать все из тестовой таблицы? Разве это не избыток? – user2677821
Да, параметр столбцов должен быть в формате sql. Это просто пример, поэтому вы можете написать свои собственные параметры и выбрать данные таким же образом. Насколько мне известно, существует только один вариант получения разных столбцов из процедуры без ручного кодирования. Если вы хотите, чтобы ваш пользователь выбирал желаемые колоды, предположим, что это самый простой пример. – dyatchenko