2011-10-21 65 views
0

我正嘗試創建一個訪問access2010 .accdb數據庫的方法,只需通過調用SQL語句的方法即可。這種方法目前適用於我經歷了幾個小時的「試錯」之後。是否有任何方法可以細化這段代碼,使其更加健壯而簡單,因爲涉及很多步驟。 (新的連接,然後新的命令,然後新的閱讀器等似乎是太多隻是執行一個SQL命令的步驟?)查詢的C#精煉方法代碼

btw此代碼是查詢數據庫並返回一個字符串。

public static string getString(string SQL) 
{ 
    using (var connection = new OleDbConnection(connectionString)) 
    using (var command = connection.CreateCommand()) 
    { 
     command.CommandText = SQL; 
     command.CommandType = CommandType.Text; 

     connection.Open(); 

     using (var reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       return reader.GetString(0).ToString(); 
      } 
     } 

     return null; 
     } 
    } 
} 
+0

對我來說看起來很短暫。你想要多短?你可以只在其他地方打開你的連接,但是如果我是你,我會每次都打開它(除非你一直在做很多查詢)...總之,保持原樣...哦,你看起來像你沒有使用命令參數來防止SQL注入 - 谷歌搜索,如果你需要 – musefan

+0

我的建議是將刪除內部使用,你只需要一個使用,而不是執行讀者使用執行標量因爲你只返回一條記錄 –

回答

2

既然你將最多讀取一個值,你可以使用ExecuteScalar方法:

using(var connection = new OleDbConnection(connectionString)) 
using(var command = connection.CreateCommand()) 
{ 
    command.CommandText = SQL; 
    command.CommandType = CommandType.Text; 

    connection.Open(); 

    var value = command.ExecuteScalar(); 

    return value == DBNull.Value ? null : value.ToString(); 
} 
0
在我看來

這種方法看起來非常好,沒有太多的補充,如果沒有異常日誌記錄與日誌記錄系統上的SQL語句的日誌。

還要介意你實際上只返回一個標量字符串,因爲你可以使用ExecuteScalar並完全避免讀者。