【问题标题】:Insert data into two table in SQL在 SQL 中将数据插入到两个表中
【发布时间】:2012-09-11 13:49:23
【问题描述】:

可以同时向两个表中插入数据吗?在我当前的页面中,只有一个命令只在一个表中插入数据,CarTab。

 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
    SqlCommand cmd = new SqlCommand("Insert into CarTab(Manufacture,Model,Plate,Color,Year,Service,Roadtax) Values (@manufactures,@models,@plates,@colors,@years,@services,@roadtaxs)", conn);

    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@manufactures", Label1.Text);
    cmd.Parameters.AddWithValue("@models", Label2.Text);
    cmd.Parameters.AddWithValue("@plates", Label3.Text);
    cmd.Parameters.AddWithValue("@colors", Label4.Text);
    cmd.Parameters.AddWithValue("@years", Label5.Text);
    cmd.Parameters.AddWithValue("@services", Label6.Text);
    cmd.Parameters.AddWithValue("@roadtaxs", Label7.Text);


    conn.Open();
    cmd.ExecuteNonQuery();

如果我想放另一个表,TempTab命令是什么?谢谢。

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    您可以在传递给 SQL 命令的文本中编写 2 个插入查询,也可以编写一个存储过程并调用它。

    【讨论】:

      【解决方案2】:

      您的答案有很多可能的解决方案。首先,我建议您在表CarTab 上的每个插入上创建一个TRIGGER

      其次,为什么不更改命令对象的CommandText,再次调用ExecuteNonQuery()

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString))
      {
          string QueryA = "Insert into CarTab(Manufacture,Model,Plate,Color,Year,Service,Roadtax) Values (@manufactures,@models,@plates,@colors,@years,@services,@roadtaxs";
          string QueryB = "Insert into TempTab(Manufacture,Model,Plate,Color,Year,Service,Roadtax) Values (@manufactures,@models,@plates,@colors,@years,@services,@roadtaxs";
      
          using (SqlCommand cmd = new SqlCommand("", conn))
          {
              cmd.CommandType = CommandType.Text;
              cmd.CommandText = QueryA;
              cmd.Parameters.AddWithValue("@manufactures", Label1.Text);
              cmd.Parameters.AddWithValue("@models", Label2.Text);
              cmd.Parameters.AddWithValue("@plates", Label3.Text);
              cmd.Parameters.AddWithValue("@colors", Label4.Text);
              cmd.Parameters.AddWithValue("@years", Label5.Text);
              cmd.Parameters.AddWithValue("@services", Label6.Text);
              cmd.Parameters.AddWithValue("@roadtaxs", Label7.Text);
      
              try
              {
                  conn.Open()
                  cmd.ExecuteNonQuery();
      
                  cmd.CommandText = QueryB;
                  cmd.ExecuteNonQuery();
              }
              catch (SqlException e)
              {
                  // put error here
              }
              finally
              {
                  conn.Close();
              }
          }
      }
      

      最后创建一个Stored Procedure

      CREATE PROCEDURE InsertRecord
      @manufactures varchar(50),
      @models varchar(50),
      @plates varchar(50),
      @colors varchar(50),
      @years varchar(50),
      @services varchar(50),
      @roadtaxs varchar(50)
      AS
      BEGIN
              Insert into CarTab(Manufacture,Model,Plate,Color,Year,Service,Roadtax) 
              Values (@manufactures,@models,@plates,@colors,@years,@services,@roadtaxs)
      
              Insert into CarTab(Manufacture,Model,Plate,Color,Year,Service,Roadtax) 
              Values (@manufactures,@models,@plates,@colors,@years,@services,@roadtaxs)
      END
      GO
      

      在您的 C# 代码中,

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString))
      {
      
          using (SqlCommand cmd = new SqlCommand("InsertRecord", conn))
          {
              cmd.CommandType = CommandType.StoredProcedure;
              cmd.CommandText = QueryA;
              cmd.Parameters.AddWithValue("@manufactures", Label1.Text);
              cmd.Parameters.AddWithValue("@models", Label2.Text);
              cmd.Parameters.AddWithValue("@plates", Label3.Text);
              cmd.Parameters.AddWithValue("@colors", Label4.Text);
              cmd.Parameters.AddWithValue("@years", Label5.Text);
              cmd.Parameters.AddWithValue("@services", Label6.Text);
              cmd.Parameters.AddWithValue("@roadtaxs", Label7.Text);
      
              try
              {
                  conn.Open()
                  cmd.ExecuteNonQuery();
              }
              catch (SqlException e)
              {
                  // put error here
              }
              finally
              {
                  conn.Close();
              }
          }
      }
      

      【讨论】:

      【解决方案3】:

      您重复与问题中显示的代码相同的代码,但修改第二个表的查询和参数。此外,我建议您将 IDisposable 资源(例如数据库连接和命令)包装在 using 语句中。

      【讨论】:

        【解决方案4】:

        多表插入是对 INSERT..SELECT 的扩展。语法格式如下:

        INSERT ALL|FIRST
        [WHEN condition THEN] INTO target [VALUES]
        [WHEN condition THEN] INTO target [VALUES]
        ...
        [ELSE] INTO target [VALUES]
        SELECT ...
        FROM   source_query;
        

        来源:http://www.oracle-developer.net/display.php?id=209

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-23
          • 1970-01-01
          • 2013-07-21
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          相关资源
          最近更新 更多