当前位置: 首页 > 知识库问答 >
问题:

当当前列表在列表中时,跳过在数据库中插入现有数据/列表 [重复]

干旺
2023-03-14

这是保存列表的功能,有什么方法可以让我将列表保存在数据库中,并跳过现有的列表,这样它就会与现有的列表重复。

private void SaveEventDetailEdit()
{
    clsGlobalVariable gv = clsGlobalVariable.GetInstance;

    gv.EventIdEdit = txtEventIDEdit.Text;

    int counter = 0;

    foreach (ListViewItem item in lvwAttendeesEdit.Items)
    {
        counter++;
        gv.ItemNoEdit = counter;
        gv.DEmpIdEdit = item.SubItems[1].Text.ToString();
        gv.DAttendeesEdit = item.SubItems[2].Text.ToString();
        gv.EdeptEdit = item.SubItems[3].Text.ToString();

        DataTable dt = new DataTable();
        DataSet ds = new DataSet();

        DBSQLStatement dbSQLLayer = new DBSQLStatement();
        ds = (DataSet)dbSQLLayer.SaveEventDetailEdit();
    }
}

下面是我保存列表的SQL

public object SaveEventDetailEdit()
{
    DBConnection conn = new DBConnection();
    DataSet ds = new DataSet();
    StringBuilder sbSQL = new StringBuilder();

    clsGlobalVariable gv = clsGlobalVariable.GetInstance;
    
    sbSQL.AppendLine(" INSERT INTO tblEventDetail( EventID, EmpID, Attendees, Dept, ItemNo)");
    sbSQL.AppendLine(" VALUES ( '" + gv.EventIdEdit + "', '" + gv.DEmpIdEdit + "', '" + gv.DAttendeesEdit + "', '" + gv.EdeptEdit + "', '" + gv.ItemNoEdit + "')");
    

    ds = (DataSet)conn.SelectData(sbSQL.ToString());
    return ds;
}

共有1个答案

毋树
2023-03-14

您的插入应该是这样的:

sbSQL.AppendLine(" INSERT INTO tblEventDetail tb1( EventID, EmpID, Attendees, Dept, ItemNo)");
sbSQL.AppendLine(" VALUES ( '" + gv.EventIdEdit + "', '" + gv.DEmpIdEdit + "', '" + gv.DAttendeesEdit + "', '" + gv.EdeptEdit + "', '" + gv.ItemNoEdit + "')");
sbSQL.AppendLine(" WHERE NOT EXISTS ( SELECT 1 FROM tblEventDetail tb2 WHERE tb2.EventID= '" + gv.EventIdEdit + "')")

正如Dale K提到的,您确实应该避免使用这种连接技术来运行SQL命令,因为SQL注入是通过使用参数实现的。

您可以创建如下存储过程:

sp_InsertEventDetail (@pEventID INT, @pEmpID INT, @pAttendees VARCHAR(MAX), @pDept VARCHAR(MAX), @pItemNo BIGINT)
AS
BEGIN

    INSERT INTO tblEventDetail tb1(EventID, EmpID, Attendees, Dept, ItemNo)
    SELECT @pEventID,@pEmpID,@pAttendees,@pDept,@pItemNo
    WHERE NOT EXISTS WHERE NOT EXISTS (SELECT 1 FROM tblEventDetail tb2 WHERE tb2.EventID = @pEventID)3
    
END
 类似资料:
  • 问题内容: 如何使用查询获取SQL Server数据库中所有表的列表。我的意图是将其动态显示在网页上。 问题答案: 尝试: 这应该给您您想要的。然后,您需要从网页中调用它,以所需格式显示。 您可能要看: 如何使用C#在组合框中从数据库获取所有表的名称 可能会帮助您完成您想做的事情。 另外-您可能想看一下SQL Server:我应该在sys表上使用information_schema表吗? 用于sy

  • 我试图在列表中的列表中插入一些东西,但是我不知道该怎么做。 例如,我有一个列表列表: 我想将插入子列表,索引为0,位于元素之后,所以它看起来像这样:

  • 问题内容: 我正在使用带有SQL数据库的C#开发应用程序。 我有一个模型: 我想将其表示为表格。 表格的哪些正确字段? 问题答案: 这取决于该人与他将负责的其他人之间存在什么样的关系。 如果是父母与子女的关系,即 组成 关系,则可以使用自我参考表。就像是: 包含以下各列: , 。 相同表的外键。 如果一个人与其他人之间的关系是一个 集合 ,并且一个人可能对其他许多事情负责: , 。 : , , 。

  • 试图获取。accdb数据库(2007-2016格式)中所有表的列表。似乎找不到MSysObjects表。使用UCanAccess net.ucanaccess.jdbc.ucanaccessSqlException:UCAEXC::3.0.6用户缺乏权限或找不到对象:MSYSOBJECTS at net.ucanaccess.jdbc.ucanaccessStatement.executeQuer

  • 问题内容: 是否有一条SQL命令将列出数据库中的所有表,并且该命令与提供程序无关(可在MSSQLServer,Oracle,MySQL上运行)? 问题答案: 最接近的选项是查询表。 它是标准SQL的一部分,但并非所有供应商都支持它。据我所知,唯一支持它的RDBMS供应商是: 的MySQL PostgreSQL的 微软SQL服务器2000年/ 2005年/ 2008年 一些品牌的数据库,例如Orac