【问题标题】:how to insert update and delete records in tables如何在表中插入更新和删除记录
【发布时间】:2013-07-04 04:43:46
【问题描述】:

我有一个带有 50 个不同字段(文本框、组合框、列表视图、复选框)的大型 windows 窗体我在 sql server 数据库中有 10 个表每个表都有不同的列我想在这 10 个中插入我的 windows 窗体 50 个字段表。这是我在表中插入记录的代码

  Dim cmd As New SqlCommand
  cmd.Connection = conn
  cmd.CommandText = "Insert Into ChartOfAccount (MainCode,MainDescription,AccountCode,AccountDescription,OpeningBalance) values ('" & MainCode & "','" & MainDescription & "','" & AccountCode & "','" & AccountDescription & "','" & OpeningBalance & "')"
  cmd.ExecuteNonQuery()

所以问题是如果我将数据插入到 10 个不同的表中,那么我需要编写 10 个插入语句。

如果我更新或删除记录,我需要分别编写更新和删除命令 10 个表
这将需要很长时间,如果有任何简短的方法,请指导我。

【问题讨论】:

标签: sql-server vb.net


【解决方案1】:

您可以为此创建一个存储过程。为了创建存储过程,您可以使用以下 SQL 查询:

Create procedure [dbo].[NewUser] 
@Yourparameter1 int , 
@Yourparamtere2
As
Insert into dbo.Users 
( 
 // Db columns 
 Column1 , 
 Column2 
) 
values 
( 
@Yourparameter1
@Yourparameter2
) 

然后在您的 C# 代码中,创建一个 SQLParameter 集合并将其传递给过程。它会正常运行,并且这样你的代码会更简单。

【讨论】:

  • 当我在部门表中插入记录时,此存储过程将记录插入用户表中,然后我需要编写另一个存储过程。当我在员工表中插入记录时,我需要另一个存储过程等等........ 10次
  • 是的,但是如果您使用存储过程可以简化您的工作,因为您不必在 C# 中使用 sql 查询,而是只需传递过程名称并添加参数,
  • 所以我需要写 10 个存储过程,然后分别传递每个表参数
  • 不,您可以从一个过程中添加多个表。
【解决方案2】:

您的查询容易受到 SQL 注入的影响,因此最好使用参数:

        Dim connStr as String = "connection string values here";
        using con as new SqlConnection(connStr)

              Dim commandText as String = 
                 @"Insert Into ChartOfAccount (MainCode
                 ,MainDescription,AccountCode
                 ,AccountDescription,OpeningBalance) 
               VALUES 
               (@MainCode, @MainDesc,@AccountCode
               ,@AccountDesc,@OpeningBalance)"
              Dim cmd as New SqlCommand(commandText,con)
                cmd.Parameters.AddWithValue("@MainCode",MainCode)
                cmd.Parameters.AddWithValue("@MainDesc",MainDescription)
                cmd.Parameters.AddWithValue("@AccountCode",AccountCode)
                cmd.Parameters.AddWithValue("@AccountDesc",AccountDescription)
                cmd.Parameters.AddWithValue("@OpeningBalance",OpeningBalance)

            Try
                con.Open()
                cmd.ExecuteNonQuery()
            Catch ex as Exception
                MessageBox.Show(ex.Message) 
            End Try
        End Using

现在,这仅用于插入记录示例。

【讨论】:

  • edper 的问题是如果将记录插入另一个表我需要再次编写整个代码
  • 首先这是一个独立的代码,因此它具有连接、命令等。但是,如果您在分层环境中使用类来执行此操作,例如使用数据层来执行此操作 -您可以对该类/层中的每个表进行编码,但您可以重复使用它而无需再次编码。比如说,DataTier.Insert("TableName",classForTable)。
  • 查看codeproject.com/Articles/36847/… 后面的链接上的简单示例。
猜你喜欢
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2013-02-06
  • 1970-01-01
相关资源
最近更新 更多