2017-03-28 5 views
3

는 내가이 작업을 수행해야 할 것 같다 INSERT INTO에 덜 까다로운 방법이 있습니까? 나는 SQL 서버 DB에 여러 개체를 삽입하려면

 using (var command = new SqlCommand(@"INSERT INTO Table1 (
      Param_1, 
      Param_2, 
      Param_3, 
      ... 
      ) 
      VALUES (
      @param1, 
      @param2, 
      @param3, 
      ... 
      )",conn)) 
      { 
       command.Params.Add("@param1",...); 
       command.Params.Add("@param2",...); 
       command.Params.Add("@param3",...); 
       ... 
       foreach(var o in objects) 
       { 
       command.Params["@param1"].Value = o.Param1; 
       command.Params["@param2"].Value = o.Param2; 
       command.Params["@param3"].Value = o.Param3; 
       ... 
       command.ExecuteNonQuery(); 
       } 
      } 

그냥 함께이 퍼팅 내 머리를 잡아 당겨 있고, 나는 28 개 필드가있는 테이블이 있습니다. 나는 가장 중요한 사안 (DB 필드 이름은 다른 명명 규칙을 사용할 수도 있음)을 사용하여 긴 목록 4 번을 별도로 작성해야합니다. 그것은 미친 것처럼 보인다. 더 짧은 길이 있습니까?

엔티티 프레임 워크는 여기 저의 선택이었습니다. 코드를 굴려야합니다.

+3

[Dapper] (https://github.com/StackExchange/Dapper)를 사용할 수 있습니까? – juharr

+0

전에 들어 본 적이 없었습니다. 나는 의존성을 추가하는 것에 너무 열중하지 않습니다. –

+0

나는 여러 가지 속성을 가진 객체 나리스트 객체를 xml을 사용하여 전달하는 데 익숙하다. C#에서 객체를 문자열로 직렬화하고 sql에서 비 직렬화 할 수 있습니다. – TriV

답변

3

외부 라이브러리를 완전히 사용하지 않는다면 어때요?

void Insert (Dictionary <string, SqlType> cols, Object [] objects) 
{ 
    string colNames = string.Join (",", cols.Keys); 
    string paramNames = string.Join (",", cols.Keys.Select (c=>"@"+c)); 

    using (var command = new SqlCommand(@"INSERT INTO Table1 (" + colNames + 
      ") VALUES (" + paramNames + ")",conn)) 
    { 
      foreach (var col in cols) 
      { 
      command.Params.Add("@" + col.Key, col.Value); 
      } 

      foreach(var o in objects) 
      { 
      // Here you would have to list them all unless 
      // your object o is a Dictionary<string, object> or a DataRow. 
      command.Params["@param1"].Value = o.Param1; 
      command.Params["@param2"].Value = o.Param2; 
      command.Params["@param3"].Value = o.Param3; 
      ... 
      command.ExecuteNonQuery(); 
      } 
    } 
} 
+0

그런 사전을 만들려면 DataTable을 만들고 SqlBulkCopy 또는 TVP를 사용해야하는 이유는 무엇입니까? 반복을 피하고 매개 변수를 지정하고 성능을 향상시킵니다. –