我正在寻找一种简单的方法来解决当前的挑战。我有下表:
Id Location DateFrom DateTo RateType Rate
1 LA 01/01/2017 01/01/2018 AverageRate 18
我的代码中有一些mysql命令可以选择这些值并将它们显示到textboxes / datepickers:
public partial class MainWindow :
{
public MainWindow()
{
InitializeComponent();
string connectionString = "datasource= ;port=3306;username= ;password= ";
MySqlConnection connection = new MySqlConnection(connectionString);
MySqlCommand sAR = new MySqlCommand("Select Amount from Daily.Rates where RateType = 'Average Hourly Wages'", connection);
MySqlCommand sARF = new MySqlCommand("Select DateFrom from Daily.Rates where RateType = 'Average Hourly Wages'", connection);
MySqlCommand sART = new MySqlCommand("Select DateTo from Daily.Rates where RateType = 'AverageRate'", connection);
try
{
connection.Open();
txtAR.Text = sAHW.ExecuteScalar().ToString();
dfAR.Text = sAHWF.ExecuteScalar().ToString();
dtAR.Text = sAHWT.ExecuteScalar().ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
connection.Close();
}
我想要实现的目标:
如果我需要将速率提高到20,我希望保持18的旧速率,添加具有更新值的该行的副本,并按如下方式更改DateTo字段:new DateFrom - 1.基本上如果我更改了今天我想最终得到这个:
Id Location DateFrom DateTo RateType Rate
1 LA 01/01/2017 10/11/2017(DateFrom-1) AverageRate 18
2 LA 10/12/2017 01/01/2018 AverageRate 20
我有很多textxbox可能不会改变,所以如果没有任何值发生变化,我不想插入新行,只需保留旧值。编写此查询的最佳方法是什么?我如何才能有效地将if语句与Insert,Update和Select以及我在文本框中已有的内容结合起来以实现我的目标?谢谢。
答案 0 :(得分:2)
可能重复Select Modify and Insert into the same table
您需要两个查询,因为有INSERT
和UPDATE
。为了确保您没有获得竞争条件,您必须在TRANSACTION
中进行。为此,我建议使用存储过程。
假设您的输入值为DateFrom
,NewRate
和OldRate
以及Id
字段自动递增:
delimiter #
CREATE PROCEDURE Keep_Old_Row
(
IN p_DateFrom DATETIME,
IN p_NewRate INT,
IN p_OldRate INT
)
BEGIN
INSERT INTO Daily.Rates
(Location, DateFrom, DateTo, RateType, Rate )
SELECT Location, p_DateFrom, DateTo, RateType, p_NewRate
FROM Daily.Rates
WHERE Rate=p_OldRate;
UPDATE Daily.Rates
SET DateTo=DATE_SUB(p_Date_From, INTERVAL 1 DAY), Rate=p_NewRate
WHERE Rate=p_OldRate;
END#
delimiter ;
HOWEVER ,您将需要其他字段,因此:
INSERT INTO Daily.Rates
(Location, DateFrom, DateTo, RateType, Rate [,... Other Fields] )
SELECT Location, p_DateFrom, DateTo, RateType, p_NewRate [,... Other Fields]
真的是你想要的。