2011-10-21 8 views
0

SQLステートメントでメソッドを呼び出すだけで、access2010 .accdbデータベースにアクセスするメソッドを作成しようとしています。このメソッドは現在、私の多くの時間の "試行錯誤"の後に機能します。多くのステップが含まれているため、このコードをより堅牢で簡単にするためにこのコードを改良する方法はありますか? (新しい接続、次に新しいコマンド、新しいリーダーなどは1つのSQLコマンドを実行するだけの手順が多すぎるようです)クエリのメソッドコードを改善する

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注入から防ぐためにコマンドパラメータを使用していないように見える - あなたが必要な場合Googleで検索 – musefan

+0

私の提案は、使用しているインナーを削除し、 1つのレコードのみを返す –

答えて

2

あなたは最大1つの値を読み込みますので、あなたが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

を、この方法は非常によさそうだ、例外がでログインしていない場合は追加するには、noあまりありませんロギングシステム上のSQLステートメントのログ。

実際にはスカラー文字列を返すだけで、ExecuteScalarを使用して完全に読者を避けることができます。

関連する問題