2011-02-03 15 views
3

現時点では、のパラメータでmysqlクエリごとに新しいメソッドを作成しています。 例:CでMySQLのパラメータを自動的に追加する

public DataTable RetreiveAllLinks(int id, int categoryid) 
{ 
    const string request = 
    @" 
     SELECT * 
     FROM links 
     WHERE id=?id,categoryid=?categoryid 
     ORDER by id DESC 
    "; 
    using (var query = new MySqlCommand(request)) 
    { 
     query.Parameters.AddWithValue("?id", id); 
     query.Parameters.AddWithValue("?categoryid", categoryid); 
     return _connection.RetreiveData(query); 
    } 
} 

私はいつも10-30クエリで終わるので、これは本当に、私の神経になっている、2つのクエリは、私のために非パラメータクエリを取得するための簡単な方法をそれを行うことができたとき、およびパラメータのメソッド。例えば、

public DataTable NonParameterCommand(string r) 
{ 
    var request = r; 
    using (var query = new MySqlCommand(request)) 
    { 
     return _connection.RetreiveData(query); 
    } 
} 

私がしたいことは、正規表現です。

var pPattern = "^[\\?][\\w]"; 

、次いで要求及びパラメータとしてリストと方法、及びリストは、リクエストパラメータと同じ順序でなければなりません。要求が

`"SELECT * FROM test WHERE id=?id,categoryid=?categoryid"` 

であれば、その後の私のリストは

var _dictionary = new Dictionary<string, string>(); 
_dictionary.Add(_parameter, _value); 

と私の方法

ParameterCommand(string r, Dictionary dic) 

が、正確にどのように見えるのでしょうか?

+1

+1と質問は自動で...愛してください! –

答えて

2

辞書を使用している場合、そのキーはすでにパラメータ名になります。クエリを解析して抽出するのはなぜですか?

あなたが行うことができ

public DataTable CommandWithParams(string sql, Dictionary<string, object> parameters) 
{ 
    using (var query = new MySqlCommand(sql)) 
    { 
     foreach (var param in parameters) 
     { 
      query.Parameters.AddWithValue(param.Key, param.Value); 
     } 
     return _connection.RetreiveData(query); 
    } 
} 

それを呼び出す:

var parameters = new Dictionary<string, object>() 
{ 
    { "?param1", value1 }, 
    { "?param2", value2 } 
}; 

var result = CommandWithParams(query, parameters); 

しかし、多分あなたの代わりに辞書のリストを使用したいの?
(私はそれを推奨しません、その位置に基づいてパラメータの値を渡すとエラーが発生する可能性があります)

+1

ええ、これはまさに私が探していたものです。今私にとって本当に明白なようです。私は本当にいくつかの狂った正規表現を行い、渡された正規表現のforeachパラメータを追加しなければならないと思っていました。これは、私が助けてくれた、ありがとう! – srn

関連する問題