【问题标题】:How to insert data from 2 different sources into 2 different tables in SQL server using Web application?如何使用 Web 应用程序将来自 2 个不同来源的数据插入到 SQL Server 中的 2 个不同表中?
【发布时间】:2015-11-17 02:13:45
【问题描述】:

好的,基本上我已经在 Visual Studio 2012 Ultimate 中创建了 Web 应用程序,并且一页有这样的设计:

我还在数据库中创建了 3 个表:

产品: [id] [name]

拍卖: [id] [productid] [lastbider] [bidvalue] [lastbid]

用户: [id] [name] [password] [bids]

我需要的是,当我单击按钮时,它需要将来自 Textbox 的文本插入产品表中的 [name],并将来自 Listbox 的数字插入拍卖表中的 [bidvalue]。我该怎么做,我需要2个SqlCommands吗?

【问题讨论】:

    标签: c# sql-server visual-studio-2012 web-applications


    【解决方案1】:

    由于您需要在 Auctions 表中添加 ProductId,因此您需要在 Products 中插入,然后获取您在 sql 中创建的 productId 将其与 bidValue 一起添加到您的 Auctions 表中你有。这可以通过调用您的存储过程的SqlCommand 来完成,该过程应如下所示...

    BEGIN TRANSACTION
    
        INSERT INTO PRODUCTS VALUES('PRODUCT NAME')
        DECLARE @newProductId int = SELECT SCOPE_IDENTITY()
    
        INSERT INTO AUCTIONS(ProductId, lastBidder, bidValue, lastbid)
        VALUES (@newProductId, 'yourlastbidder, 'bidValue', 'lastbid')
    
    END TRANSACTION
    

    【讨论】:

    • 谢谢,没想到。我想对代码添加一些更改。当我们谈论事务时,它应该是COMMIT 而不是END。整个代码应该是这样的:BEGIN TRANSACTION DECLARE @newProductId int; INSERT INTO products (name) VALUES (@name); SELECT * FROM products WHERE products.id = @newProductId; SELECT @newProductId = SCOPE_IDENTITY(); INSERT INTO auctions (productid, bidvalue) VALUES (@newProductId, @bidvalue); COMMIT TRANSACTION
    【解决方案2】:

    试试这个然后打电话

        InsertData("Insert into Products (Name) Values ('" + txtName.Text + "'); Insert Into Auctions (bidvalue) Values ('" + lstBidValues.SelectedValue + "');"); 
    
        public void InsertData(string query)
        {
            using (SqlConnection con = new SqlConnection("Your connection string here"))
            {
                if (con.State != ConnectionState.Open)
                    con.Open();
                using (SqlCommand command = con.CreateCommand())
                {
                    command.CommandText = query;
                    command.ExecuteNonQuery();
                }
            }
        }
    

    【讨论】:

      【解决方案3】:

      是的,基本上你试图在两个不同的表中执行INSERT,所以你需要执行两个不同的INSERT 操作。不过,我怀疑您可能想要执行 UPDATE,但除非您澄清,否则无法确定。

      同样,您可以使用类似的存储过程一次性执行这两项操作

      create procedure usp_addData(@name varchar(10), @bidvalue INT)
      as
      begin
      //Perform first insert/update in products table using the @name parameter
      
      //perform second insert/update in auctions table using the @bidvalue parameter
      end
      

      从您的应用程序调用此存储过程,而不是进行两个不同的数据库调用。

      *** 省略C# 代码示例以保持答案简单。您可以从 SO 中的C# 获得许多调用存储过程的示例。

      【讨论】:

      • 不,我确实需要 INSERT 操作,因为我正在将新项目添加到 auctions 表中。现有的将在另一个页面上更新,但这是另一回事。不过谢谢你,一个程序解决了这个最简单的方法。
      猜你喜欢
      • 2022-11-20
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2020-12-09
      相关资源
      最近更新 更多