2011-03-08 3 views
5

DataTable에서 DATA와 함께 TSQL 스크립트를 생성해야합니다. 하나의 삽입물이 아닙니다. 그 옆에, 나는 또한 테이블 (같은 datatable 구조)을 만들 필요가DataTable을 C#의 SQL 용 CREATE TABLE + INSERT 스크립트로 변환

그래서 : 나는 데이터로 가득 DataTable 있습니다. 이 DataTable의 구조를 만드는 TSQL 스크립트를 SQL SERVER (CREATE TABLE + INSERT)에있는 데이터와 함께 사용합니다.

미리 감사드립니다. 감사합니다. 질문을 수정하는 데 도움을 주신 John Saunders에게 감사드립니다. Generate SQL INSERT commands programmatically

기본적으로 코드가 INSERT 문을 열 목록을 생성하는 DataTable.Columns 컬렉션을 반복한다 :

+0

사용하는 .NET 버전? DataTable은 매우 원시적 인 기술이며 사용자가 원하는 것을 수행하는 기본 방법이 없습니다. –

+0

Framework 3.5 대 2010 년 –

+0

을 사용하고 있습니다. 그러면 데이터베이스 모델을 만들고, 테이블을 만든 다음이를 업데이트 할 수있는 Entity Framework가 있어야합니다. DataTable은 상당히 오래된 것입니다. 제 경우에는 –

답변

1

은 한 번보세요. 그런 다음 DataTable의 값을 반복하여 값이있는 매개 변수를 만듭니다.

14

첫째, 나는 그럼 난 SQL 대량 복사가 아닌 별도의 INSERT 문을 사용 build your CREATE TABLE command.

이 객체를 사용합니다.

public static void BulkInsertDataTable(string connectionString, string tableName, DataTable table) 
     { 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       SqlBulkCopy bulkCopy = 
        new SqlBulkCopy 
        (
        connection, 
        SqlBulkCopyOptions.TableLock | 
        SqlBulkCopyOptions.FireTriggers | 
        SqlBulkCopyOptions.UseInternalTransaction, 
        null 
        ); 

       bulkCopy.DestinationTableName = tableName; 
       connection.Open(); 

       bulkCopy.WriteToServer(table); 
       connection.Close(); 
      } 
     } 
+12

"Create table command"링크가 깨졌습니다. :-( –

0

테이블에서 insert 스크립트를 만들고 싶다면 저에게 만든 도구를 사용하십시오.

다음
IF NOT EXISTS (Select 1 from Table1 WHERE Col1='Col1' AND Col2='Col2') 
INSERT INTO Table1 (Col1,Col2,Col3,Col4) VALUES (1,'abc',null,'2012-01-01') 

링크입니다 : 이 주어진 조건에 따라 여러 테이블에 Insert 스크립트를 생성 http://www.codeproject.com/Tips/330864/Generate-Insert-script-to-extract-data

+0

그 기사를 두 번 읽었지만 내용이 명확하지 않습니다. – Muflix

4
public void createsqltable(DataTable dt,string tablename) 
     { 
      string strconnection = ""; 
      string table = ""; 
      table += "IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + tablename + "]') AND type in (N'U'))"; 
      table += "BEGIN "; 
      table += "create table " + tablename + ""; 
      table += "("; 
      for (int i = 0; i < dt.Columns.Count; i++) 
      { 
       if (i != dt.Columns.Count-1) 
        table += dt.Columns[i].ColumnName + " " + "varchar(max)" + ","; 
       else 
        table += dt.Columns[i].ColumnName + " " + "varchar(max)"; 
      } 
      table += ") "; 
      table += "END"; 
      InsertQuery(table,strconnection); 
      CopyData(strconnection, dt, tablename); 
     } 
     public void InsertQuery(string qry,string connection) 
     { 


      SqlConnection _connection = new SqlConnection(connection); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = qry; 
      cmd.Connection = _connection; 
      _connection.Open(); 
      cmd.ExecuteNonQuery(); 
      _connection.Close(); 
     } 
     public static void CopyData(string connStr, DataTable dt, string tablename) 
     { 
      using (SqlBulkCopy bulkCopy = 
      new SqlBulkCopy(connStr, SqlBulkCopyOptions.TableLock)) 
      { 
       bulkCopy.DestinationTableName = tablename; 
       bulkCopy.WriteToServer(dt); 
      } 
     } 
+0

던전 열 이름을 방지하기 위해'dt.Columns [i] .ColumnName'에 중괄호를 추가했습니다. 공백이 포함 된 오류 – Muflix

관련 문제