2016-09-02 81 views
-3

我有我的系統中的數據庫中運行查詢的下一個代碼。 :這是一個從c#執行SQL Server數據庫查詢的好方法嗎?

public static DataSet execute_query(string query) 
{ 
    DataSet ds = new DataSet(); 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = DataAccessLayer.Properties.Settings.Default.cn; 
    try 
    { 
     con.Open(); 
     SqlDataAdapter da = new SqlDataAdapter(query, con); 
     da.Fill(ds); 
    } 
    catch (Exception ex) 
    { 
     ds = null; 
    } 
    finally 
    { 
     if (con.State == ConnectionState.Open) con.Close(); 
    } 

    return ds; 
} 
  1. 這是運行在C#中的數據庫查詢安全或好辦法嗎?

  2. 我已閱讀有關查詢參數。我如何使用參數來做到這一點?

+1

這是C#中Web應用程序中最常見的目標之一。找到可以幫助你實現這一目標的文檔並不困難。 –

+0

[在c#中使用參數調用存儲過程]的可能的副本(http://stackoverflow.com/questions/7542517/call-a-stored-procedure-with-parameter-in-c-sharp) –

+1

此問題最適合到[代碼評論堆棧](http://codereview.stackexchange.com/)。 –

回答

1

我看到一些提高標誌的東西。

  1. 您的工作單元和存儲庫代碼都以相同的方式生活。這限制了事務處理等。呃 - 使用不執行UOW/Repo的DA代碼已經做出了許多讓步。所以這不是要求。
  2. 你有一個公共方法接受文本用作查詢。只要確保將其與任何類型的用戶或API分開,或者可以前來訪問。 (這回答你的安全問題 - 它是安全的,如果它是從接口分離和你的查詢'擦洗'進來之前)
  3. DataSets - 即時通訊不是風扇,國際海事組織他們是非常bloaty。我通常使用DataReader,填入IList<>並稱之爲一天。但是,無論如何,如果你願意,可以使用DataSet(或DataTables)。
  4. 沒有使用using聲明。您應該處理實施IDisposable的對象,using語句是一個簡單的方法。如果你將UnitOfWork從Repository中分離出來,那麼我不會提及這一點 - 因爲UnitOfWork將在其他地方處理。

要使用參數從連接和查詢中創建一個SqlCommand對象。在該對象中,您可以將參數添加到Parameters集合中。

cmd.Parameters.AddWithValue("paramname", paramvalue); 

飼料是到DataAdapter 祝你好運!

相關問題