【发布时间】:2012-02-01 21:00:37
【问题描述】:
我有一个数据库,其中包含一些名为 UPC 标题描述和数量的列。我正在尝试检查列中是否已经存在 UPC 编号,如果确实存在,则将该条目的数量更新为 1,这是我到目前为止所拥有的:
MySqlConnection connection = new MySqlConnection(MyConString);
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO tableName " +
"(upc, title, description, quantity) " +
"VALUES " +
"(@upc, @title, @description, @quantity)";
MySqlCommand upcCheck = connection.CreateCommand();
upcCheck.CommandText = "Select COUNT (*) FROM tableName WHERE " +
"(upc=@upc) LIMIT 1";
upcCheck.Parameters.AddWithValue("@upc", upc.Text); //Checks for duplicate UPCs
MySqlDataReader check = upcCheck.ExecuteReader();
if( check.Read() != false)
{
command.Parameters.AddWithValue("@quantity",++); //not sure how to word it right
}
command.Parameters.AddWithValue("@upc", upc.Text); //adding parameters SAFELY to the statement
command.Parameters.AddWithValue("@title", titlename);
command.Parameters.AddWithValue("@description", descname);
command.Parameters.AddWithValue("@quantity", "1");
MySqlDataReader result = command.ExecuteReader();
我只是不知道如何用它来进行检查。
更新!这是工作代码。
MySqlConnection connection = new MySqlConnection(MyConString);
connection.Open();
MySqlCommand updatecommand = connection.CreateCommand();
updatecommand.CommandText = "UPDATE tableName Set quantity = quantity +1 " +
"WHERE upc = @upc";
updatecommand.Parameters.AddWithValue("@upc", upc.Text);
using (MySqlDataReader updateResult = updatecommand.ExecuteReader())
{
if (updateResult.RecordsAffected == 0)
{
affected = true;
}
else
{
affected = false;
}
}
if(affected == true)
{
MySqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO tableName " +
"(upc, title, description, quantity) " +
"VALUES " +
"(@upc, @title, @description, @quantity)";
command.Parameters.AddWithValue("@upc", upc.Text);
command.Parameters.AddWithValue("@title", titlename);//adding parameters SAFELY to the statement
command.Parameters.AddWithValue("@description", descname);
command.Parameters.AddWithValue("@quantity", "1");
MySqlDataReader result = command.ExecuteReader();
}
【问题讨论】:
-
您实际上可以为此使用 upsert - en.wikipedia.org/wiki/Upsert
-
因此,如果我对插入或更新进行 upsert INSTEAD 操作,它会做或?
-
是的,用一个 upsert 替换你的两个语句。逻辑是“如果它不存在则插入它,否则更新该行。”
标签: c# mysql winforms if-statement