Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中自动神奇地添加MySQL参数#_C#_.net_Mysql_Regex_Dictionary - Fatal编程技术网

C# 在C中自动神奇地添加MySQL参数#

C# 在C中自动神奇地添加MySQL参数#,c#,.net,mysql,regex,dictionary,C#,.net,Mysql,Regex,Dictionary,目前,我正在为每个mysql查询创建一个新方法,其中包含我想要执行的参数。 例如: public DataTable RetreiveAllLinks(int id, int categoryid) { const string request = @" SELECT * FROM links WHERE id=?id,categoryid=?categoryid ORDER by id DESC ";

目前,我正在为每个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个查询,而两个查询可以帮我完成,一个是检索非参数查询的简单方法,一个是检索参数的方法。比如说

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

但是具体是什么呢?

如果您使用的是字典,那么键应该已经是参数名了。为什么要解析查询以提取它们

你可以做:

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);
    }
}
public DataTable CommandWithParams(字符串sql、字典参数)
{
使用(var query=newmysqlcommand(sql))
{
foreach(参数中的var参数)
{
query.Parameters.AddWithValue(param.Key,param.Value);
}
返回_connection.RetreiveData(查询);
}
}
称之为:

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

var result = CommandWithParams(query, parameters);
var参数=新字典()
{
{param1',value1},
{?param2“,value2}
};
var result=CommandWithParams(查询、参数);
但也许你想用列表代替字典?

(我不建议这样做,根据参数的位置传递参数值很容易出错)

是的,这正是我一直在寻找的。这对我来说现在很明显。我真的认为我必须做一些疯狂的正则表达式,并为通过的每个正则表达式添加参数。这对我很有帮助,谢谢+1对于问题和自动使用术语。。。爱死它了!
var parameters = new Dictionary<string, object>()
{
    { "?param1", value1 },
    { "?param2", value2 }
};

var result = CommandWithParams(query, parameters);