2015-09-25 3 views
0

У меня есть веб-сайт, связанный с базой данных SQL Server, и я хочу добавить к нему простой SQL-запрос (для администраторов). Я надеялся использовать DataContext и запускать запрос, а затем возвращать результаты в виде простого списка. Есть какой-либо способ сделать это?Простой SQL-запрос с DataContext

Использование

   string full_query = "SELECT " + query; 
      IEnumerable<string> results = DB.DB().ExecuteQuery<string>(full_query); 

Не работает, метание ошибки, где Интс приходят через. Изменение параметра шаблона на «объект» тоже не помогает.

Поэтому мне нужно запустить оператор select и вернуть результаты в виде списка на странице.

Любые идеи?

+0

как делает ваш оператор выбора выглядит !!! –

+0

Никита, оператор выбора будет генерироваться во время выполнения, так что это может быть что угодно. Единственным ограничением является то, что он начнет с «выбрать» и иметь только одну команду (так что нет цепочки отборное с последующей вставкой) –

ответ

0

После немного беспорядка я нашел что-то, что работает. Я использую класс под названием DatabaseResults держать результаты:

public class DatabaseResults 
{ 
    public List<string> ColumnNames { get; set; } 
    public List<List<string>> Rows { get; set; } 

    public DatabaseResults() 
    { 
     ColumnNames = new List<string>(); 
     Rows = new List<List<string>>(); 
    } 
} 

Способ затем идет и выполняет запрос, захватывая заголовки и положить их в объектах результатов. Затем он считывает строки, беря строки значений столбца. «query» - это строка, переданная в. Это запрос «select», при этом отсутствует бит select.

  DatabaseResults results = new DatabaseResults(); 
      string full_query = "SELECT " + query; 
      DbConnection connection = DB.DB().Connection; 
      connection.Open(); 
      var command = connection.CreateCommand(); 
      command.CommandText = full_query; 

      try 
      { 
       using (var reader = command.ExecuteReader()) 
       { 

        for (int i = 0; i < reader.FieldCount; i++) 
        { 
         results.ColumnNames.Add(reader.GetName(i)); 
        } 

        while (reader.Read()) 
        { 
         List<string> this_res = new List<string>(); 
         for (int i = 0; i < reader.FieldCount; ++i) 
         { 
          this_res.Add(reader[i].ToString()); 
         } 
         results.Rows.Add(this_res); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       results.ColumnNames.Add("Error"); 
       List<string> this_error = new List<string>(); 
       this_error.Add(ex.Message); 
       results.Rows.Add(this_error); 
      } 
      finally 
      { 
       connection.Close(); 
      } 

Я не могу уничтожить соединение, так как он используется в объекте системы БД, так что мне нужно, чтобы открыть и закрыть его. Попробуйте/поймать /, наконец, убедитесь, что это происходит.

3

Обычно вы хотите использовать:

var results = DB.DB().SqlQuery(full_query); 

Если вы хотите вставить/обновление/удаление, вы можете использовать:

DB.DB().ExecuteSqlCommand(full_query); 

Надеется, что это помогает.

+0

У меня есть DataContext, а не DbContext, поэтому у меня нет доступа к SQLQuery –

+0

ли вам есть ли какой-либо параметр в выбранном запросе? –

+0

kienct89, запрос выбора создается во время выполнения, поэтому он может иметь что-нибудь в нем. –

Смежные вопросы