В моем приложении я хочу построить sql-запрос, чтобы получить набор результатов и экспортировать в excel. На моей странице мне нужно указать критерии и столбцы, которые необходимо показать в excel. Я прошел через this сообщение. В этом случае мы можем выбрать необходимые столбцы и написать предложение where, а также выбрать из нескольких таблиц, но не поддерживать некоторые функции, например «Union», Есть ли способ построить сложные запросы для получения динамических результатов из sqlsql query builder для выбора в C#
1
A
ответ
0
в случае, если вам нужен сложный путь для создания ваших запросов вы должны ввести их:
Boolean doUnion = true;
String yourExternalCompsedWhere = "1=1";
String strQuery = String.Format(@"DECLARE @param int -- any type
--DECLARE anything else
SET @param = {0}
SELECT {1} ColumnA, {2} ColumnB FROM TableX WHERE Field3 = @param
WHERE {3}", param, "Field1", "Field2", yourExternalComposedWhere);
if (doUnion)
strQuery += String.Format(@"
UNION
SELECT {0}, {1} FROM TableY WHERE Field7 != @param", "Field3", "Field4");
SqlConnection sqlConn = new SqlConnection(strConn);
sqlConn.Open();
SqlCommand sqlCmd = new SqlCommand(strQuery, sqlConn);
SqlDataReader sqlDR = sqlCmd.ExecuteReader();
while (sqlDR.Read())
{
//Do what you need to do
};
sqlDr.Close()
После этой схемы вы можете добавить все, что вы хотите; имейте в виду, что этот способ действия склонен к SQL-инъекции
1
Я являюсь автором SqlKata, построителем запросов sql, который поддерживает сложные запросы, оператор union еще не поддерживается, но я уверен, что он поможет вам в ваша ситуация, это также экономит u от SQL-инъекций, поскольку использует технологию привязки параметров, проверяет ее и надеется, что она помогает в решении проблемы ура.
+1
Этот проект очень полезен! – Hadi
Остерегайтесь динамического sql. это риск для безопасности. –
@ ZoharPeled, используя сочетание проверок с информационной схемой и параметризацией, риск можно смягчить. Если приложение действительно требует возможности генерации SQL. –
@NeilP Вы правы, но давайте теперь переходим к предположению, что каждый знает, как написать безопасный и хорошо продуманный динамический SQL-запрос. на самом деле, большинство людей, которые испытывают соблазн использовать динамический sql, просто не знают о том, что существует такая вещь, как [sql injection.] (https://xkcd.com/327/) –