2012-09-11 6 views
1

동시에 두 테이블에 데이터를 삽입 할 수 있습니까? 현재 페이지에는 하나의 테이블 인 CarTab에 데이터를 삽입하는 명령이 하나만 있습니다.SQL의 두 테이블에 데이터를 삽입

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은 무엇입니까? 감사.

답변

0

이 당신의 대답에 여러 가지 해결책이있다. 먼저, 테이블 CarTab의 모든 삽입물에 TRIGGER을 생성하는 것이 좋습니다.

둘째, 명령 개체를 변경하고 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(); 
     } 
    } 
} 

그리고 마지막으로

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# 코드에서 Stored Procedure, 생각 SP의

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(); 
     } 
    } 
} 
+0

존, Thnks 우 .. 유 pls는 볼 수 만들어 내 여기 질문은 도움이 필요해. 어쩌면 당신은 몇 가지 아이디어를 내놓을 수 있습니다. 감사합니다 .http : //stackoverflow.com/questions/12362882/value-in-dropdown-menu-removed –

+0

당신은() {}을 사용하여 conn.Close() – Sasha

2

SQL 명령으로 전달하는 텍스트 내에 2 개의 삽입 쿼리를 작성하거나 저장 프로 시저를 작성하여 대신 호출 할 수 있습니다.

+0

1 : –

0

질문에 표시된 코드와 동일한 코드를 반복하지만 두 번째 테이블에 대한 쿼리와 매개 변수는 수정하십시오. 또한 데이터베이스 연결 및 명령과 같은 IDisposable 리소스를 using 문으로 래핑하는 것이 좋습니다.

0

다중 테이블 삽입은 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

관련 문제