1

問題があります。MySQL データベースに sp_insertSupplier というストアド プロシージャがあります。このメソッドは、mysql データベースで実行すると機能します。

この構文を保存ボタンで作成します

private void btn_supplier_save_Click(object sender, EventArgs e)
{
    string connections = Connection.mysqlconnectionbuilder();
    using (MySqlConnection conn = new MySqlConnection(connections))
    {
        using (MySqlCommand cmd = new MySqlCommand()) 
        {
            //make connection
            cmd.Connection = conn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "call sp_insertSupplier(@KD,@NM,@AL,@EM,@TLP);";
            cmd.Parameters.AddWithValue("@KD", createCode()); 
            cmd.Parameters.AddWithValue("@NM", txtsuppliernama.Text); 
            cmd.Parameters.AddWithValue("@AL", txtsupplieralamat.Text); 
            cmd.Parameters.AddWithValue("@EM", txtsupplieremail.Text); 
            cmd.Parameters.AddWithValue("@TLP",txtsuppliernotelp.Text);
            try
            {
                conn.Open();
                int result = cmd.ExecuteNonQuery();
                //check the result status
                if (result.Equals(1))
                {
                    DialogResult results = MessageBox.Show("Data berhasil ditambahkan! \n Apakah anda ingin input data lainnya? ", "Sukses!", MessageBoxButtons.OKCancel);
                    //cek apabila ingin menambahkan data lagi.
                    if (results.Equals(DialogResult.OK))
                    {
                        reset();
                    }
                    else if (results.Equals(DialogResult.Cancel))
                    {
                        this.Close();
                    }
                }
            } //end TRY
            catch (Exception exe)
                {
                    MessageBox.Show("Terjadi Kesalahan", "Perhatian!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    StreamWriter _writer = new StreamWriter("E899911823.log");
                    _writer.WriteLine(exe.ToString());
                    Console.WriteLine(exe.ToString());
                } //END CATCH
            finally 
                {
                    conn.Clone();
                } //END FINALLY
        }
    }
}

しかし、構文を実行すると、エラーが表示されます。

MySql.Data.MySqlClient.MySqlException (0x80004005): Procedure or function '`call sp_insertSupplier(@KD,@NM,@AL,@EM,@TLP)`' cannot be found in database XXXXX

@KD を作成する接続マネージャーまたはランダムな方法に問題はないと思います。

まだ同じ問題があります。コンソールには次のように表示されます。

MySql.Data.MySqlClient.MySqlException (0x80004005): Procedure or function '`call sp_insertSupplier`' cannot be found in database '`XXXXX`'.
at MySql.Data.MySqlClient.ProcedureCache.GetProcData(MySqlConnection connection, String spName)
at MySql.Data.MySqlClient.ProcedureCache.AddNew(MySqlConnection connection, String spName)
at MySql.Data.MySqlClient.ProcedureCache.GetProcedure(MySqlConnection conn, String spName, String cacheKey)
at MySql.Data.MySqlClient.StoredProcedure.GetParameters(String procName, DataTable& proceduresTable, DataTable& parametersTable)
at MySql.Data.MySqlClient.StoredProcedure.CheckParameters(String spName)
at MySql.Data.MySqlClient.StoredProcedure.Resolve(Boolean preparing)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
at SerbaManisInventory.SupplierAdd.btn_supplier_save_Click(Object sender, EventArgs e)

コードを次のように書き直すだけです。

using (MySqlCommand cmd = new MySqlCommand()) 
{
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "call sp_insertSupplier";
    cmd.Parameters.AddWithValue("@KD", createCode()); 
    cmd.Parameters.AddWithValue("@NM", txtsuppliernama.Text);
    cmd.Parameters.AddWithValue("@AL", txtsupplieralamat.Text); 
    cmd.Parameters.AddWithValue("@EM", txtsupplieremail.Text);
    cmd.Parameters.AddWithValue("@TLP",txtsuppliernotelp.Text); 
    try
        {
            ...
4

4 に答える 4

7

接続文字列でデータベース名がすべて小文字であることを確認してください。私もこのエラーを受け取り、このバグレポートを使用して解決し、データベース名をすべて小文字に変更しました。この動作は、ターゲット システムの種類に依存していないようです。

于 2013-08-22T00:14:31.217 に答える
2

CommandText にストアド プロシージャの名前を書き込むだけです。

  cmd.CommandText = "sp_insertSupplier";

CommandText を記述する方法では、プロバイダーに「call sp_insertSupplier ......」で構成される名前のストアドプロシージャを検索させますが、明らかにその名前のプロシージャはありません。

于 2013-04-19T11:09:43.530 に答える
0

commandText cmd.CommandText = "sp_insertSupplier"; にストアド プロシージャの名前を書き込むだけです。「呼び出し」部分は必要ありません

于 2013-04-19T11:23:20.727 に答える