Проверьте существующий идентификатор, обновите или вставьте значения из CheckBox - PullRequest
2 голосов
/ 10 мая 2019

У меня небольшая проблема с обновлением существующего идентификатора, я не знаю точно, как отнести его к C#, используя DAPPER.

Моя идея заключается в том, что значение из флажка 1 = true, 0 = false для определенного месяца, я вхожу в базу данных, в настоящее время я всегда делаю блок ELSE, как мне настроить, чтобы обновить идентификатор?

Это мой код:

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

Идентификатор - это Идентичность, и он всегда увеличивается на 1. Возможно ли это вообще?

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Вы можете передать идентификатор в качестве параметра

val = "value";
cnn.Execute("insert into Table(val) values (@val)", new {val});

cnn.Execute("update Table set val = @val where Id = @id", new {val, id = 1});

Редактировать

Сначала вам нужно выбрать объект, который вы хотите обновить, существует идентификатор, вам нужно знать, какой он есть ... только тогда вы сможете выполнить обновление этого объекта.

Итак, просто передайте этот Id в качестве параметра ..

Попробуйте добавить идентификатор свойства к объекту checkBox1 и установите для этого свойства значение определенного месяца. Поэтому, когда вы переходите к этому методу CheckBox1_CheckedChanged, вы берете значение идентификатора и передаете его как параметр.

0 голосов
/ 10 мая 2019

Вы должны будете сохранить идентификатор с каждым флажком и связать один и тот же обработчик событий с каждым флажком, например, с полем Tag флажка.

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

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

Затем в обработчике событий:

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