2011-05-28 135 views
1
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 [email protected]"; 
    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用新值更新旧值。如果这些值不存在,那么它需要插入一个新值。使用ON DUPLICATE KEY UPDATE更新插入查询已存在row

它不会执行,但不更新现有的值

考虑我的表

1 a 
2 b 

使用此查询

INSERT INTO categories(CategoryID,CategoryName) 
VALUES(1,qq) ON DUPLICATE KEY UPDATE CategoryID = 1 

然后我想要的结果是

1 qq 
2 b 

回答

2

您正在使用错误的命令。

使用此查询,而不是:

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后是出于选择和放弃。

0

您使用的是正确的语句,但在错误的道路。

而不是

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你必须把你想改变,而你的情况是类别名称的列。 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

相关问题