gpt4 book ai didi

c# - 使用 ON DUPLICATE KEY UPDATE 插入查询更新已存在的行

转载 作者:行者123 更新时间:2023-11-29 07:08:02 24 4
gpt4 key购买 nike

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;
}

我希望插入命令 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

最佳答案

你使用了错误的命令。

改为使用此查询:

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 没有选择并放弃了。

关于c# - 使用 ON DUPLICATE KEY UPDATE 插入查询更新已存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com