在CheckBox中检查现有ID,更新或插入值

时间:2019-05-10 14:36:37

标签: c# dapper identity

我在更新现有ID时遇到了一个小问题,我不知道如何使用C#将其引用到DAPPER

我的想法是,在特定月份,1 = true, 0 = false复选框中的值会输入数据库,当前我始终执行ELSE阻止,如何设置以更新ID?

这是我的代码:

private void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
   int _value;
    if (checkBox1.Checked)
        _value = checkBox1.ImageIndex = 1;
    else
        _value =  checkBox1.ImageIndex = 0;
    using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Zeiterfassung"].ConnectionString))
    {
        string insertQuery = @"IF EXISTS (SELECT * FROM [dbo].[MONATSSALDO] WHERE [ID]=@ID) //how to refer this id?
                            UPDATE [dbo].[MONATSSALDO] SET [MA_ID]=@MA_ID, [MONATSSALDO]=@MONATSSALDO, [DATUM]=@DATUM, [MONAT_IST_KONTROLLIERT]=@MONAT_IST_KONTROLLIERT WHERE [ID]=@ID
                            ELSE
                            INSERT INTO [dbo].[MONATSSALDO]([ID],[MA_ID], [MONATSSALDO], [DATUM], [MONAT_IST_KONTROLLIERT])
                            VALUES (@ID, @MA_ID, @MONATSSALDO, @DATUM, @MONAT_IST_KONTROLLIERT)";
        var result = db.Execute(insertQuery, new { MA_ID=userID,  MONATSSALDO= 4, DATUM = calendar1.CurrentDate, MONAT_IST_KONTROLLIERT = _value });
    }
}

这看起来像是我的基本计划

CREATE TABLE [dbo].[MONATSSALDO](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [MA_ID] [int] NOT NULL,
    [MONATSSALDO] [float] NOT NULL,
    [DATUM] [date] NULL,
    [MONAT_IST_KONTROLLIERT] [tinyint] NOT NULL,
 CONSTRAINT [MONATSSALDO_ID] PRIMARY KEY NONCLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[MONATSSALDO] ADD  CONSTRAINT [DF_MONATSSALDO]  DEFAULT ((0)) FOR [MONATSSALDO]
GO

该ID为身份,并且始终增加1。这有可能吗?

2 个答案:

答案 0 :(得分:1)

您可以将ID作为参数传递

2019-05-10 15:20:46

修改

首先,您必须选择要更新ID的对象存在,您需要知道它是哪个对象。.只有这样,您才可以对该对象执行更新。

因此,只需将该ID作为参数传递即可。

尝试将属性ID添加到checkBox1对象,并将该属性设置为特定月份的值。因此,当您使用CheckBox1_CheckedChanged方法时,您将获取ID的值并将其作为参数传递。

答案 1 :(得分:0)

您必须将ID与每个复选框一起存储,并将相同的事件处理程序链接到每个复选框,例如该复选框的“标记”字段。

        checkBox1.Tag = 1;
        checkBox1.CheckedChanged += HandleCheckBox;

        checkBox2.Tag = 2;
        checkBox2.CheckedChanged += HandleCheckBox;

然后在您的事件处理程序中:

 int id = (int)(sender as CheckBox).Tag;
        ...