2015-05-27 3 views
1

В моем приложении я хочу построить sql-запрос, чтобы получить набор результатов и экспортировать в excel. На моей странице мне нужно указать критерии и столбцы, которые необходимо показать в excel. Я прошел через this сообщение. В этом случае мы можем выбрать необходимые столбцы и написать предложение where, а также выбрать из нескольких таблиц, но не поддерживать некоторые функции, например «Union», Есть ли способ построить сложные запросы для получения динамических результатов из sqlsql query builder для выбора в C#

+2

Остерегайтесь динамического sql. это риск для безопасности. –

+0

@ ZoharPeled, используя сочетание проверок с информационной схемой и параметризацией, риск можно смягчить. Если приложение действительно требует возможности генерации SQL. –

+0

@NeilP Вы правы, но давайте теперь переходим к предположению, что каждый знает, как написать безопасный и хорошо продуманный динамический SQL-запрос. на самом деле, большинство людей, которые испытывают соблазн использовать динамический sql, просто не знают о том, что существует такая вещь, как [sql injection.] (https://xkcd.com/327/) –

ответ

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