所以我有一个非常大的预编译mysql查询集。这个查询在我的c#应用程序之外执行得非常好,但是当我试图在我的c#应用程序中执行它时,我遇到了一个问题。请注意,我不能修改查询本身,也不能在代码中重新编译它,我需要它按原样执行。
查询本身由许多不同的查询组成,这些查询遵循以下模式:
DELETE FROM stores WHERE region_id = 1;
INSERT INTO stores (region_id, name, score, type) VALUES (17, '1', 0, 'Profit'),(17, '2', 0, 'Profit'),(17, '3', 0, 'Profit'),(17, '4', 0, 'Profit'),(17, '5', 0, 'Profit'),(17, '6', 0, 'NonProfit'),(17, '7', 0, 'NonProfit'),(17, '8', 0, 'NonProfit'),(17, '9', 0, 'NonProfit'),(17, '10', 0, 'NonProfit');
SELECT id INTO @store_id0 FROM stores WHERE region_id=17 AND name = '1' AND type = 'Profit';
INSERT INTO store_merch(store_id, item_id, stock) VALUES (@store_id0, 1360, 0),(@store_id0, 440, 5);
当我在navicat(数据库管理工具)之类的工具上执行它时,它会像预期的那样工作,但是在我的c程序中,它会生成以下异常:
必须定义参数'@store\u id0'。
这是我的查询执行函数。。。
public bool ExecuteQuery(
string raw_query)
{
if (this.Open() == true)
{
//Create Command
MySqlCommand cmd = new MySqlCommand(raw_query, connection);
try
{
int changed_rows = cmd.ExecuteNonQuery();
if (changed_rows > 0)
{
this.Close();
return true;
}
else
{
Logger.GetInstance().Error("MySQLConnection::ExecuteQuery", "Zero records changed for in raw query.");
}
}
catch (MySqlException e)
{
Logger.GetInstance().Error("MySQLConnection::ExecuteQuery", e.Message);
}
this.Close();
}
return false;
}
有人知道问题出在哪里吗?
2条答案
按热度按时间sczxawaw1#
//您可以使用stringbuilder编写多个查询
stringbuilder strb=新建stringbuilder();strb.append(“选择incentivecode作为代码,incentivedescription作为policyName,”);
sqlcommandtext=strb.tostring();
tvokkenx2#
对于模式中的每个变量
@name
必须创建参数并提供其值: