Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

c# DBの更新エラーです。 解決済み

タグの編集...

投稿者 ケンケン   (社会人)   投稿日時 2022/4/28 18:44:29
       private void UpdBtn_Click(object sender, EventArgs e)
        {
            // MySQLへの接続情報
            string server = "localhost";
            string port = "3306";
            string database = "mysql";
            string user = "root";
            string pass = "root";
            string charset = "utf8";
            string connectionString = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};Charset={5}",
                                                    server, port, database, user, pass, charset);
            // 変数定義
            int sw = 0;
            // MySQLへの接続
            try
            {

                // データ登録SQL
                var sql = "update employee ";
                sql += "   set  shimei   = @shimei ";
                sql += "     ,  sex      = @sex ";
                sql += "     ,  age      = @age ";
                sql += "     ,  birthday = @birthday ";
                sql += "     ,  dept     = @dept ";
                sql += "     ,  rank     = @rank ";
                sql += "     ,  email    = @email ";
                sql += "     ,  upddate  = @update ";
                sql += "   where id = @id ";

                using (MySqlConnection connection = new MySqlConnection(connectionString))
                using (MySqlCommand command = new MySqlCommand(sql, connection))
                {

                    int _id = Int32.Parse(Idtext.Text);
                    // パラメータのデータ設定
                    string _sex = "";
                    // 性別
                    if (Manradio.Checked)
                    {
                        _sex = "男性";
                    }
                    else
                    {
                        _sex = "女性";
                    }
                    //  キー設定
                    int _age = Int32.Parse(AgetextBox.Text);
                    DateTime dt = DateTime.Now;
                    //  項目設定
                    command.Parameters.Add(new MySqlParameter("@id", _id));
                    command.Parameters.Add(new MySqlParameter("@shimei", Nametext.Text));
                    command.Parameters.Add(new MySqlParameter("@sex", _sex));
                    command.Parameters.Add(new MySqlParameter("@age", _age));
                    command.Parameters.Add(new MySqlParameter("@birthday", BirthdayText.Text));
                    command.Parameters.Add(new MySqlParameter("@dept", Deptcombo.SelectedItem.ToString()));
                    command.Parameters.Add(new MySqlParameter("@rank", Rankcombo.SelectedItem.ToString()));
                    command.Parameters.Add(new MySqlParameter("@email", Emailtext.Text));
                    command.Parameters.Add(new MySqlParameter("@upddate", dt));

                    // データベースとの接続をオープン
                    command.Connection.Open();

                    // 登録実行
                    command.ExecuteNonQuery();

                    MessageBox.Show("社員情報DBに更新されました。", "情報", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    //データベースとの接続をクローズ
                    command.Connection.Close();
                }

            }
            catch (MySqlException me)
            {
                MessageBox.Show("DBエラー: " + me.Message, "異常", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
上記は、更新ソースです。
DBは、mysql
エラ-は、DB更新時
エラ-内容は、「Fatal error encountered during command execution.」

何方か分かる方宜しくお願いいたします。






投稿者 るきお   (社会人)   投稿日時 2022/4/28 19:02:07
いろいろな可能性がありそうです。
データベースなど外部の機能を使用する場合、プログラムに問題がなくてもデータベース側の都合でエラーになる場合があります。何が問題なのか確認したほうが良さそうです。

エラー発生時に MySqlExceptionクラスからもっと詳細な情報を取得できませんか?
Messageプロパティ以外で、たとえば、InnerExceptionプロパティ、Numberプロパティ、SqlStateプロパティ、その他のプロパティを確認して何が起こっているかヒントになるような情報が入っていないか調べてみてください。

よくあるのは、キー重複、値の桁数オーバー、データベースが読み取り専用または書き込み権限がないなどが思いつきますが、これらに限らずさまざまな可能性があると思います。

MySQL側のログに何か出力されているかもしれません。

ちなみに最近 MySQL は雲行きが怪しいような感じがしています。PostgreSQLやMariaDBにシフトしていくかもしれないなぁ…と。これは雰囲気レベルです。

投稿者 ケンケン   (社会人)   投稿日時 2022/5/1 17:04:24
回答ありがとうございます。

 `upddate` は timestamp の属性で。

command.Parameters.Add(new MySqlParameter("@upddate", dt));

上記の文でエラーに成ってました。

DateTime _dt = DateTime.Now;
string _dtc = _dt.ToString("yyyy-MM-dd HH:mm:ss");
command.Parameters.Add(new MySqlParameter("@upddate", _dtc));

上記の様に修正してもエラーでした。

何方か、タイムスタンプの設定の方法が分かる方宜しくお願いいたします。



投稿者 ケンケン   (社会人)   投稿日時 2022/5/1 17:38:54

DateTime _dt = DateTime.Now;
string _dtc = _dt.ToString("yyyy-MM-dd HH:mm:ss");
command.Parameters.Add(new MySqlParameter("@upddate", _dtc));

今日色々を修正していたら上記の方法でエラーが消えました。

色々とありがとうございます。

不思議です。