目前,我正在使用参数为每个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);
和我的方法
ParameterCommand(string r, Dictionary dic)
但究竟是怎么回事?
答案 0 :(得分: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);
但也许你想使用List而不是Dictionary? (我不推荐它,根据它们的位置传递参数值会容易出错)