sql >> データベース >  >> RDS >> Mysql

mysqlデータベースへの値の挿入が期待どおりに機能しない

    MysqlDataAdapterでは、selectCommandのみを設定する必要があります。 MySqlCommandBuilderによってinsertCommandが自動的に生成されます

    コードはほぼ正しいです。必要な変更は2つだけです。

    1。 dataAdapterCurrentTest.Update(ds.Tables["currentTest"])の前に次の行を追加します

    new MySqlCommandBuilder(dataAdapterCurrentTest);
    


    2。コードの次の行にコメント

    dataAdapterCurrentTest.InsertCommand=insertCmd
    

    したがって、最終的なコードは

     class Program
        {
            static void Main(string[] args)
            {
                MySqlConnectionStringBuilder connBuilder = new MySqlConnectionStringBuilder();
    
                connBuilder.Server = "ds2";
                connBuilder.Database = "fhem";
                connBuilder.UserID = "fhemdbuser";
                connBuilder.Port = 3307;
                connBuilder.Password = "!2345Abcde";
                //connBuilder.DefaultCommandTimeout = 120;
                //connBuilder.UseDefaultCommandTimeoutForEF = true;
                //connBuilder.AllowUserVariables = true;
    
                MySqlConnection conn = new MySqlConnection(connBuilder.ConnectionString);
                conn.Open();
                MySqlCommand selectCmdCurrent = new MySqlCommand("select `TIMESTAMP`, `DEVICE`, `TYPE`, `EVENT`, `READING`, `VALUE`, `UNIT` from current;", conn);
                MySqlCommand selectCmdCurrentTest = new MySqlCommand("select `TIMESTAMP`, `DEVICE`, `TYPE`, `EVENT`, `READING`, `VALUE`, `UNIT` from currentTest;", conn);
                MySqlCommand updateCmd = new MySqlCommand("update `currentTest` set `TIMESTAMP`[email protected],`DEVICE`[email protected],`TYPE`[email protected],`EVENT`[email protected],`READING`[email protected],`VALUE`[email protected],`UNIT`[email protected]", conn);
                updateCmd.Parameters.Add("@p1", MySql.Data.MySqlClient.MySqlDbType.DateTime);
                updateCmd.Parameters.Add("@p2", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                updateCmd.Parameters.Add("@p3", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                updateCmd.Parameters.Add("@p4", MySql.Data.MySqlClient.MySqlDbType.VarString, 512);
                updateCmd.Parameters.Add("@p5", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                updateCmd.Parameters.Add("@p6", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                updateCmd.Parameters.Add("@p7", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
    
                MySqlCommand insertCmd = new MySqlCommand("insert into `currentTest` values(@p1, @p2, @p3, @p4, @p5, @p6, @p7)", conn);
                insertCmd.Parameters.Add("@p1", MySql.Data.MySqlClient.MySqlDbType.DateTime);
                insertCmd.Parameters.Add("@p2", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                insertCmd.Parameters.Add("@p3", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                insertCmd.Parameters.Add("@p4", MySql.Data.MySqlClient.MySqlDbType.VarString, 512);
                insertCmd.Parameters.Add("@p5", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                insertCmd.Parameters.Add("@p6", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                insertCmd.Parameters.Add("@p7", MySql.Data.MySqlClient.MySqlDbType.VarString, 128);
                MySqlDataAdapter dataAdapterCurrent = new MySqlDataAdapter(selectCmdCurrent);
                MySqlDataAdapter dataAdapterCurrentTest = new MySqlDataAdapter(selectCmdCurrentTest);
                // MySqlCommandBuilder builder = new MySqlCommandBuilder(dataAdapterCurrent);
               // dataAdapterCurrentTest.InsertCommand = insertCmd;
                dataAdapterCurrentTest.UpdateCommand = updateCmd;
                DataSet ds = new DataSet();
                MySqlCommand prepareCmd = new MySqlCommand("truncate currentTest;", conn);
                prepareCmd.ExecuteNonQuery();
                //prepareCmd = new MySqlCommand("insert into currentTest select * from current;", conn);
                //prepareCmd.ExecuteNonQuery();
                prepareCmd = new MySqlCommand("INSERT INTO `currentTest` VALUES(\"2020-06-06 12:45:23\",\"DEVICE\", \"TYPE\", \"EVENT\", \"READING\", \"VALUE\", \"UNIT\")", conn);
                for (int i = 0; i < 10; i++)
                    prepareCmd.ExecuteNonQuery();
                dataAdapterCurrentTest.Fill(ds, "currentTest");
                dataAdapterCurrent.Fill(ds, "current");
                int row = 0;
    
                Stopwatch sw = new Stopwatch();
                for (int i = 0; i < 10; i++)
                {
    
                    DataRow newrow = ds.Tables["currentTest"].NewRow();
                    newrow["Timestamp"] = DateTime.Now;
                    newrow["Device"] = "Device";
                    newrow["TYPE"] = "Type";
                    newrow["EVENT"] = "Event";
                    newrow["READING"] = "Reading";
                    newrow["VALUE"] = "Value";
                    newrow["UNIT"] = "Unit";
                    ds.Tables["currentTest"].Rows.Add(newrow);
                }
    
                new MySqlCommandBuilder(dataAdapterCurrentTest);
    
                dataAdapterCurrentTest.Update(ds.Tables["currentTest"]);
                ds.Tables["currentTest"].AcceptChanges();
            }
        }
    



    1. SQL Server:日付範囲の計算

    2. Oracle SQL:where句のタイムスタンプ

    3. pgAdminでER図を作成する

    4. MariaDBの順序は間違っていますが、MySQLでは正しい