小编典典

我的 MySQL 存储过程中出现错误:cmd.ExecuteNonQuery()

all

  1. 我在这里有我的存储过程“sp_ProductAdjustment”
CREATE PROCEDURE sp_ProductAdjustment 
(IN `_product_code` varchar(35), IN `_adjusted_qty` int, 
IN `_stock_in_out` char(3), IN `_status` varchar(10))
BEGIN
   ***some codes here***
END
  1. 然后我的 C# 代码调用我存储的过程
    public bool ProductAdjustment(string prodcode, int qty,string in_out,string status)
    {
            conn = Database.getConnection();
            try
            {
                conn.Open();
                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = "sp_ProductAdjustment";
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("_product_code", MySqlDbType.VarChar).Value = prodcode;
                cmd.Parameters["_product_code"].Direction = ParameterDirection.Input;

                cmd.Parameters.Add("_adjusted_qty", MySqlDbType.Int32).Value = qty;
                cmd.Parameters["_adjusted_qty"].Direction = ParameterDirection.Input;

                cmd.Parameters.Add("_stock_in_out", MySqlDbType.VarChar).Value = in_out;
                cmd.Parameters["_stock_in_out"].Direction = ParameterDirection.Input;

                cmd.Parameters.Add("_status", MySqlDbType.VarChar).Value = status;
                cmd.Parameters["_status"].Direction = ParameterDirection.Input;

                if (cmd.ExecuteNonQuery() == 1) **error on this line**
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }catch(MySqlException ex)
            {
                MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message);

                return false;
            }
            finally
            {
                conn.Close();
            }
        }
  1. 我的代码调用 ProductAdjustment() 方法
string in_out = radioButton1.Checked ? "IN" : "OUT";
if (prod.ProductAdjustment(txtproductCode.Text, Convert.ToInt32(numericUpDown_adjust.Value.ToString()), in_out, comboBox_reasons.Text))
{
   MessageBox.Show("Product Adjusted");
}
  1. 然后我的错误:System.NotSupportedException:’.Net Framework 不支持字符集’utf8mb3’。

阅读 90

收藏
2022-07-18

共1个答案

小编典典

我只是在尝试任何事情,直到我得到调用存储过程的正确解决方案。这是我的建议:

cmd.Connection = conn;
cmd.CommandText = "call sp_ProductAdjustment(@product_code, @adjusted_qty, @stock_in_out, @status)";
cmd.CommandType = CommandType.Text;

cmd.Parameters.Add("@product_code", MySqlDbType.VarChar).Value = prodcode;
cmd.Parameters["@product_code"].Direction = ParameterDirection.Input;

cmd.Parameters.Add("@adjusted_qty", MySqlDbType.Int32).Value = qty;
cmd.Parameters["@adjusted_qty"].Direction = ParameterDirection.Input;

cmd.Parameters.Add("@stock_in_out", MySqlDbType.VarChar).Value = in_out;
cmd.Parameters["@stock_in_out"].Direction = ParameterDirection.Input;

cmd.Parameters.Add("@status", MySqlDbType.VarChar).Value = status;
cmd.Parameters["@status"].Direction = ParameterDirection.Input;
  1. 首先,请注意我如何将CommandTypefrom更改CommandType.StoredProcedureCommandType.Text
  2. 接下来是正文。而不是仅仅调用存储的过程名称。我编写了调用存储过程的整个命令。从:cmd.CommandText = "sp_ProductAdjustment"; 到:cmd.CommandText = "call sp_ProductAdjustment(@product_code, @adjusted_qty, @stock_in_out, @status)";
  3. 然后,我在里面命名了我自己的参数sp_ProductAdjustment(parameters here)
  4. 最后,我不知道为什么在线教程对我不起作用,但幸运的是我仍然找到了正确的解决方案。
2022-07-18