Mysql dataadapter InsertCommand

时间:2013-07-24 07:34:57

标签: c# asp.net mysql

我有以下代码

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,类,MaintType和Duedate是datacolumns。当我执行代码时,它没有给出任何错误,但数据没有在表PMduedates中更新。

2 个答案:

答案 0 :(得分:1)

为什么DataAdapter会在DataTable中插入记录?没有人告诉它这样做。只有当它们在RowState.Added中时才会插入行,你可以用这种方式强制它:

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

但是既然你手动提供了insert-command和参数,我也会手动执行查询:

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

答案 1 :(得分: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();