0

.NET コネクタを使用して MySql データベースにデータを挿入しようとしています。

私のストアドプロシージャは次のとおりです。

CREATE PROCEDURE `spr_StoreMoveData2`(IN `@characterID` INT, IN `@moveName` VARCHAR(1000), IN `@validBlocks` VARCHAR(50), IN `@damage` VARCHAR(500), IN `@stun` VARCHAR(500), IN `@cancelAbility` VARCHAR(50), IN `@framesStartup` VARCHAR(500), IN `@framesActive` VARCHAR(500), IN `@framesRecovery` VARCHAR(500), IN `@framesAdvOnHit` VARCHAR(500), IN `@framesAdvOnBlock` VARCHAR(500), IN `@additionalNotes` VARCHAR(5000))
    LANGUAGE SQL
    NOT DETERMINISTIC
    MODIFIES SQL DATA
    SQL SECURITY DEFINER
    COMMENT 'test'
BEGIN
INSERT INTO movedata 
(characterid, movename, validblocks, damage, stun, supermetergain,cancelability, framesStartup, framesActive, framesRecovery, framesAdvOnHit, framesAdvOnBlock, AdditionalNotes) 
VALUES 
(@characterID, @moveName, @validBlocks, @damage, @stun, @superMeterGain, @cancelAbility, @framesStartup, @framesActive, @framesRecovery, @framesAdvOnHit, @framesAdvOnBlock, @additionalNotes);
END

これはうまく保存されているようです。

私の.NETコードは次のとおりです。

 using (MySqlConnection conn = new MySqlConnection())
                {
                    conn.ConnectionString = ConfigurationManager.AppSettings["connectionString"].ToString();
                    conn.Open();

                    MoveData move1 = lmd[0];

                    MySqlCommand cmd = new MySqlCommand("spr_StoreMoveData", conn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("CharacterID", move1.CharacterID);
                    cmd.Parameters.AddWithValue("movename", move1.MoveName);
                    cmd.Parameters.AddWithValue("validblocks", move1.ValidBlocks);
                    cmd.Parameters.AddWithValue("damage", move1.Damage);
                    cmd.Parameters.AddWithValue("stun", move1.Stun);
                    cmd.Parameters.AddWithValue("supermetergain", move1.SuperMeterGain);
                    cmd.Parameters.AddWithValue("cancelability", move1.CancelAbility);
                    cmd.Parameters.AddWithValue("framesstartup", move1.Frames_Startup);
                    cmd.Parameters.AddWithValue("framesactive", move1.Frames_Active);
                    cmd.Parameters.AddWithValue("framesrecovery", move1.Frames_Recovery);
                    cmd.Parameters.AddWithValue("framesAdvOnHit", move1.Frames_AdvantageOnHit);
                    cmd.Parameters.AddWithValue("framesAdvOnBlock", move1.Frames_AdvantageOnBlock);
                    cmd.Parameters.AddWithValue("additionalNotes", move1.AdditionalNotes);

                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    cmd = null;
                }

これを使用する場合、または次のテストクエリを使用する場合

call spr_StoreMoveData (1, '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1')

エラー「列 'CharacterID' を null にすることはできません」が表示されます。null 値を許可するように列を設定すると、すべて null 値で行が挿入されます。少し困惑しています。

Web ですべての回答を調べてみましたが、構文の微妙な点が欠けているようです。誰でも助けることができますか?

4

1 に答える 1

1

あなたのステートメントは@superMeterGain、あなたのプロシージャがパラメータとして持っていない を使用しています。したがって、プロシージャーが認識していないパラメーターを設定して使用しています。ストアド プロシージャのパラメーターのリストに追加すると、機能するはずです。

于 2013-05-23T22:54:46.543 に答える