0

次のコードがあります

MySqlConnection myCon = new MySqlConnection(System.Configuration.ConfigurationManager.AppSettings["mySQLCon"]);
MySqlDataAdapter dAdap = new MySqlDataAdapter();
dAdap.InsertCommand = new MySqlCommand("insert into PMduedates(eCId,ECClass,ddate,PMType) values(eCId,ECClass,ddate,PMType)", myCon);
dAdap.InsertCommand.Parameters.Add("eCId", MySqlDbType.VarChar, 20, "eqpID");
dAdap.InsertCommand.Parameters.Add("ECClass", MySqlDbType.VarChar, 100, "class");
dAdap.InsertCommand.Parameters.Add("ddate", MySqlDbType.VarChar, 100, "MaintType");
dAdap.InsertCommand.Parameters.Add("PMType", MySqlDbType.Date, 10, "Duedate");
myCon.Open();
dAdap.Update(dtDue);
myCon.Close();

上記のコードでは、dtDue はデータテーブルであり、eqpID、class、MaintType、および Duedate はデータ列です。コードを実行しているときにエラーは発生しませんが、テーブル PMduedates でデータが更新されません。

4

2 に答える 2

1

DataAdapterにレコードを挿入する必要があるのはなぜDataTableですか? 誰もそうするように言わなかった。にある場合にのみ行を挿入しますRowState.Added。次の方法で強制できます。

foreach (DataRow row in dtDue.Rows)
    row.SetAdded();

ただし、挿入コマンドとパラメーターを手動で提供しているため、クエリも手動で実行します。

using(var myCon = new MySqlConnection(System.Configuration.ConfigurationManager.AppSettings["mySQLCon"]))
using(var cmd = new MySqlCommand("insert into PMduedates(eCId,ECClass,ddate,PMType) values(eCId,ECClass,ddate,PMType)", myCon))
{
    cmd.InsertCommand.Parameters.Add("eCId", MySqlDbType.VarChar, 20, "eqpID");
    cmd.InsertCommand.Parameters.Add("ECClass", MySqlDbType.VarChar, 100, "class");
    cmd.InsertCommand.Parameters.Add("ddate", MySqlDbType.VarChar, 100, "MaintType");
    cmd.InsertCommand.Parameters.Add("PMType", MySqlDbType.Date, 10, "Duedate");
    myCon.Open();
    int countInserted = cmd.ExecuteNonQuery();
} // using closes the connection implicitely
于 2013-07-24T07:44:09.303 に答える
0

問題は、パラメーターと列に同じ名前を付けたことで、パラメーター名を変更したことだと思います。たとえば、これを試してください。

MySqlConnection myCon = new MySqlConnection(System.Configuration.ConfigurationManager.AppSettings["mySQLCon"]);
MySqlDataAdapter dAdap = new MySqlDataAdapter();
dAdap.InsertCommand = new MySqlCommand("insert into PMduedates(eqpID,class,Duedate,MaintType) values(@eCId,@ECClass,@ddate,@PMType)", myCon);
dAdap.InsertCommand.Parameters.Add("@eCId", MySqlDbType.VarChar, 20, "eqpID");
dAdap.InsertCommand.Parameters.Add("@ECClass", MySqlDbType.VarChar, 100, "class");
dAdap.InsertCommand.Parameters.Add("@ddate", MySqlDbType.VarChar, 100, "MaintType");
dAdap.InsertCommand.Parameters.Add("@PMType", MySqlDbType.Date, 10, "Duedate");
myCon.Open();
dAdap.Update(dtDue);
myCon.Close();
于 2013-07-24T07:44:01.510 に答える