2015-09-25 50 views
0

我有一個連接到SQL Server數據庫的網站,我想爲它添加一個簡單的SQL查詢(針對管理員)。我希望能夠使用DataContext並運行查詢,然後將結果作爲簡單列表返回。有沒有辦法做到這一點?使用DataContext進行簡單的SQL查詢

使用

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

不行的,扔在那裏整數來通過錯誤。將模板參數更改爲「對象」也無濟於事。

所以我需要運行一個select語句,並返回結果作爲頁面上的列表。

任何想法?

+0

你的select語句是怎樣的! –

+0

Nikita,select語句將在運行時生成,所以它可能是任何東西。唯一的限制是它將以「select」開頭,並且只有一個命令(所以沒有選擇後跟一個插入鏈接) –

回答

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>>(); 
    } 
} 

方法,然後去和運行查詢,抓住了標題,並把他們的結果對象。然後它讀取行,獲取列值的字符串。 「查詢」是傳入的字符串。它是「選擇」查詢,缺少選擇位。

  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(); 
      } 

我不能銷燬連接,因爲它是由系統db對象使用的,所以我需要打開並關閉它。 try/catch /終於可以確保發生這種情況。

3

通常你會想使用:

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

如果你想插入/更新/刪除,你可以使用:

DB.DB().ExecuteSqlCommand(full_query); 

希望它能幫助。

+0

我有一個DataContext,而不是一個DBContext,所以我沒有訪問SqlQuery –

+0

你你的選擇查詢中有任何參數? –

+0

kienct89,選擇查詢是在運行時創建的,所以它可以包含任何內容。 –