繁体   English   中英

如何在C#中一次执行多个MySQL查询?

[英]How Can I Execute Multiple MySQL Queries At Once In C#?

因此,我有一个非常非常大的预编译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_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;
  }

有人知道是什么问题吗?

//您可以使用StringBuilder并编写比查询更多的内容

StringBuilder strb =新的StringBuilder(); strb.Append(“将SELECT IncentiveCode作为代码,将IncentiveDescription作为PoliceyName,”);

            strb.Append(" IncPeriodCode as IncetvePeriodCode, PolP.PoliceyPeriodDesc as IncetivePeriodName,");

            strb.Append(" EffectedDate ,EndDate ,pol.SuppCode as SuppCode ,comp.SuppName as SuppName,pol.IsActive from IncentivePolicey pol");

            strb.Append(" LEFT outer join IncentivePoliceyPeriod PolP");
            strb.Append(" ON pol.IncPeriodCode = PolP.PoliceyPeriodCode");

            strb.Append(" LEFT OUTER JOIN Inventory_Suppliers comp ON pol.SuppCode = comp.SuppCode");

sqlcommandText = strb.toString();

对于每个具有@name模式的变量,您必须创建一个参数并提供其值:

cmd.Parameters.AddWithValue("@store_id0", 123);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM