2014-11-13 4 views
0

"foreach"없이이 작업을 수행 할 수 있습니까 ???배열 데이터를 SqlCommand.Parameter에 바인딩하는 방법?

데이터 목록 매개 변수를 연결하고 N 모두 함께

String SQL_DETAIL = "INSERT INTO [ImportDetail] " + 
                 " ([idMaster] " + 
                 " ,[operation] " + 
                 " ,[data]) " + 
               " VALUES " + 
                 " (@a,@b,@c) "; 

foreach (ImportDetail imp in this.lstImportDetail) 
{ 

    SqlCommand dettCommand = new SqlCommand(SQL_DETAIL, myTrans.Connection); 
    dettCommand.Transaction = myTrans; 

    dettCommand.Parameters.Add("a", SqlDbType.Int).Value = imp.IdMaster; 
    dettCommand.Parameters.Add("b", SqlDbType.NVarChar).Value = imp.Operation; 
    dettCommand.Parameters.Add("c", SqlDbType.NVarChar).Value = imp.Data; 


    i =i+ (int)dettCommand.ExecuteNonQuery(); 
} 

도움이 유쾌한 기분이 된 경우

+0

예. 'for' 또는'while'을 사용할 수 있습니다. – Reniuz

+0

lstImportDetail의 내용은 무엇입니까? –

+1

1) foreach를 사용하지 않는 특별한 이유가 있습니까? 2)'.Add' 메소드에서'@ a','@b'와'@c'를 사용해야합니다. 3) foreach를 사용하면 각 반복에서 시작하는 모든 매개 변수를'.Clear '해야합니다. 4)'ExecuteNonQuery'가'int'를 반환하기 때문에'int'를 캐스팅 할 필요가 없습니다. 5) _using_ 문을 사용하여 데이터베이스 연결 W 오브젝트를 처 리하십시오. –

답변

1

에 대한 감사합니다, 당신은을 만들 수 삽입 실시합니다 라이브러리 함수가있는 경우 이해 것 사용자 정의 테이블 유형을 선택하고 모든 ImportDetail 오브젝트의 데이터를 DataTable에 넣으십시오. 그러나 이것은 루프의 필요성을 완전히 줄이지는 못합니다. 단지 원격 데이터베이스로 전달하는 대신 메모리의 데이터 만 변환하기 때문에 훨씬 효율적입니다. DataTable이 테이블 형식의 스키마와 일치하도록 채워지면이 값을 저장 프로 시저의 매개 변수로 전달하여 INSERT을 처리 할 수 ​​있습니다. 원한다면 프로 시저를 트랜잭션화할 수 있으며, 입력 데이터가 이미 일종의 테이블에 있으므로 저장 프로 시저의 SQL도 매우 단순해야합니다.

사용자 정의 테이블 형식에 대한 추가 정보를 원하시면

그들이 .NET에서 사용하는 방법,이 링크를 체크 아웃 : 이것은 당신이 자주해야 할 일이 있다면, http://msdn.microsoft.com/en-us/library/bb675163.aspx

조금 더 나아가를, 그건 이걸 어떤 종류의 확장 방법으로 바꿀 가능성이 없다. IEnumerable DRY를 유지하라.

찾고 계신 솔루션 종류입니까? 질문의 말씨가 나에게 말하기가 조금 힘듭니다.

+0

이것은 내가 찾고있는 것이 아니라 생각을 고마워합니다. – daniele3004

1

당신은 두 개의 배열 목록을 정의 할 수 있습니다 는 첫 번째 매개 변수의 이름과 두 번째의 값을가집니다 :

 ArrayList arrayName = new ArrayList { }; 
     ArrayList arrayValue = new ArrayList { }; 

     arrayName.Add("@Parameter1"); 
     arrayName.Add("@Parameter2"); 
     arrayValue.Add(value1); 
     arrayValue.Add(value2); 

     for (int i = 0; i < arrayName.Count; i++) 
     { 
     cmd.Parameters.AddWithValue(arrayName[i].ToString(), arrayValue[i]); 
     } 

그런 다음 명령을 실행