C# 检查现有id,更新或插入复选框中的值
我在更新现有ID时遇到了一个小问题,我不知道如何使用C# 检查现有id,更新或插入复选框中的值,c#,dapper,identity,C#,Dapper,Identity,我在更新现有ID时遇到了一个小问题,我不知道如何使用DAPPER将其引用到C 我的想法是,复选框1=true,0=false中的值对于特定月份,我进入数据库,当前我总是执行其他块,我如何设置以更新ID 这是我的代码: private void CheckBox1_CheckedChanged(object sender, EventArgs e) { int _value; if (checkBox1.Checked) _value = checkBox1.Imag
DAPPER
将其引用到C
我的想法是,复选框1=true,0=false
中的值对于特定月份,我进入数据库,当前我总是执行其他块,我如何设置以更新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是Identity,它总是增加1。可能吗?您可以将ID作为参数传递
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 exist的对象,您需要知道它是哪一个。。只有这样,才能对该对象执行更新
因此,只需将该Id作为参数传递
尝试向checkBox1对象添加属性ID,并将该属性设置为特定月份的值。因此,当您使用此方法CheckBox1\u CheckedChanged时,您获取ID的值并将其作为参数传递。您必须将ID与每个复选框一起存储,并将相同的事件处理程序链接到每个复选框,例如复选框的标记字段
checkBox1.Tag = 1;
checkBox1.CheckedChanged += HandleCheckBox;
checkBox2.Tag = 2;
checkBox2.CheckedChanged += HandleCheckBox;
然后在事件处理程序中:
int id = (int)(sender as CheckBox).Tag;
...
请参阅:@OlivierJacot Descombes他使用的是Dapper。我找不到Dapper输入参数的示例。是
SqlConnection
Dapper吗?@OlivierJacot Descombes是的,这是一个很棒的实用程序,扩展到IDbConnection,本质上是一个微型ORM。参数是自动设置的。很遗憾,我无法使用答案,请阅读我的帖子,我希望现有id更新值。您的答案没有帮助。@lasta,如果您想更新需要ID的特定行,您无法猜测,您需要在复选框和月份之间建立关系,当您使用此方法时,您需要使用该ID来更新该行