connection()
{
OleDbConnection nwindConn=new OleDbConnection();
MySql.Data.MySqlClient.MySqlConnection con= new MySqlConnection();
MySqlCommand cmd;
con.ConnectionString ="server=localhost;" +
"uid=root;"+
"pwd=;" +
"database=globasys;" ;
DateTime dt=DateTime.Now;
string select = "SELECT CategoryID, CategoryName FROM categories";
MySqlDataAdapter catDA = new MySqlDataAdapter(select, con);
string insert = "insert into categories(CategoryID,CategoryName)
VALUES(@CategoryID,@CategoryName)
ON DUPLICATE KEY UPDATE CategoryID=@CategoryID";
catDA.InsertCommand = new MySqlCommand(insert, con);
catDA.InsertCommand.Parameters.Add("@CategoryID", MySqlDbType.Int32
, 11, "CategoryID");
catDA.InsertCommand.Parameters.Add("@CategoryName", MySqlDbType.VarChar
, 250, "CategoryName");
DataSet catDS = new DataSet();
catDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
catDA.Fill(catDS, "Categories");
DataSet newdt = new DataSet();
newdt = getnewdata();
int i= catDA.Update(newdt, "Categories");
}
public DataSet getnewdata()
{
DataSet catDS=new DataSet();
DataTable dt = new DataTable();
DataColumn col1 = new DataColumn("CategoryID", typeof(int));
dt.Columns.Add(col1);
DataColumn col=new DataColumn("CategoryName",typeof(string));
dt.Columns.Add(col);
DataColumn[] Cols = { dt.Columns[0] };
dt.PrimaryKey =Cols;
DataRow crow = dt.NewRow();
crow["CategoryID"]=1;
crow["CategoryName"]="io";
dt.Rows.Add(crow);
dt.TableName = "Categories";
DataRow crow1 = dt.NewRow();
crow1["CategoryID"] = 3;
crow1["CategoryName"] = "p";
dt.Rows.Add(crow1);
dt.TableName = "Categories";
catDS.Tables.Add(dt);
return catDS;
}我希望insert命令ON DUPLICATE KEY UPDATE用新值更新旧值。如果这些值不存在,则需要插入一个新值。
它会执行,但不会更新现有值
考虑到我的桌子
1 a
2 b使用此查询
INSERT INTO categories(CategoryID,CategoryName)
VALUES(1,qq) ON DUPLICATE KEY UPDATE CategoryID = 1然后我希望结果是
1 qq
2 b发布于 2011-05-28 19:03:29
您使用了错误的命令。
请改用以下查询:
REPLACE INTO categories (CategoryID,CategoryName)
VALUES(1,qq);这就是查询不起作用的原因
INSERT INTO categories(CategoryID,CategoryName)
VALUES(1,qq) ON DUPLICATE KEY UPDATE CategoryID = 1这段代码试图将1插入到CategoryID中,但这不起作用,因为表中已经有1了。
接下来,运行ON DUPLICATE KEY子句。
这会将CategoryID设置为1。
但是之前是1,之后是1,所以什么都没有改变,您仍然在尝试插入重复的键。
在那之后,MySQL别无选择,放弃了。
发布于 2014-03-19 18:18:37
您使用的语句是正确的,但使用的方式是错误的。
而不是
INSERT INTO categories(CategoryID,CategoryName)
VALUES(1,"qq") ON DUPLICATE KEY UPDATE CategoryID = 1你应该写下
INSERT INTO categories(CategoryID,CategoryName)
VALUES(1,"qq") ON DUPLICATE KEY UPDATE CategoryName = VALUES(CategoryName)因为您必须将要更改的列放在关键字UPDATE之后,在本例中是CategoryName。VALUES(CategoryName)意味着新值是您已经为INSERT声明的值-在本例中是"qq“。
这是官方文档:http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
这句话比REPLACE INTO更好,有几个原因。例如,请看这里:Insert into a MySQL table or update if exists
https://stackoverflow.com/questions/6161171
复制相似问题