2009-09-30 9 views
2

각 파일에 대해 Dbcommand를 사용하여 트랜잭션을 호출하는 파일 컬렉션이 있습니다. 예를 들어C# DbCommand in loop

:

DbCommand insert = db.GetStoredProcCommand("Insert"); 
    db.AddInParameter(insert, "FileName", System.Data.DbType.String, 
     ID + ".xml"); 
    db.ExecuteNonQuery(insert, transaction); 

내 질문에 내가 루프에 넣고 어떻게입니까?

아래의 대답은 효과가 없지만 훌륭한 코드 샘플을 사용해 주셔서 감사합니다. 문제는 db에 조작 할 수있는 Parameters 컬렉션이 없다는 것입니다. 나는이 같은 내 데이터베이스를 선언하고 ...

http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.data.sql.sqldatabase_members%28BTS.10%29.aspx

을 확인하십시오

SqlDatabase db = new SqlDatabase(this.ConnectionString); 
+0

파일 컬렉션은 무엇입니까? –

+0

표준 fileInfo [] –

답변

9
DbCommand insert = db.GetStoredProcCommand("Insert"); 
foreach (string ID in myIDs) 
{ 
    insert.Parameters.Clear(); 
    db.AddInParameter(insert, "FileName", System.Data.DbType.String, 
     ID + ".xml"); 
    db.ExecuteNonQuery(insert, transaction); 
} 

또한 단지 루프 밖에서 한 번 매개 변수를 추가 한 다음 내부의 값을 변경할 수 있습니다 고리. 하나는 6 분의 1, 다른 하나는 6 분의 1입니다

+0

누군가가 실제로 downvoting 있습니까? – MusiGenesis

+0

그냥 메모 - DbCommand에서 매개 변수를 지우고 대답을 업데이트해야합니다. 나머지는 괜찮습니다. –

+0

@JL : 샘플에서 사용하는 클래스가 무엇인지 잘 모르겠습니다. 일반적으로 'System.Data'를 사용합니다. SqlClient' 네임 스페이스. 나는 전에 "AddInParameter"메소드를 본 적이 없었습니다. – MusiGenesis

3

SQL Server 2008을 사용하는 경우 (아직 많은 것은 아닙니다 ...) 테이블 변수를 사용할 수 있습니다! 체크 아웃 : https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=168

그런 식으로 하나의 명령으로 전체 파일 집합을 할 수 있으므로 많은 시간을 절약 할 수 있습니다.

또는 분리 문자로 모든 파일 이름을 결합한 다음 SQL 저장 프로 시저로 분할 할 수 있습니다.

장점은 DB에 대한 트랜잭션을 최소화하는 것입니다. 단점은 프로그래밍이 곧장 앞으로 나아지지 않는다는 것입니다.

+0

을 확인하십시오. 이것은 훌륭합니다. 나는 즉시 이것으로부터 혜택을 볼 수있는 몇 가지 애플 리케이션을 가지고있다. 감사! – NotMe

0
db.AddInParameter(cmd, "xxx", DbType.Int32); 
db.AddInParameter(cmd, "xxx", DbType.Int32); 
db.AddInParameter(cmd, "xxx", DbType.Int32); 
int id = 0; 
db.AddOutParameter(cmd, "ccc", DbType.Int32, id); 

foreach (xxx item in xxxx) 
{ 
    db.SetParameterValue(cmd, "xxx", item.InvestmentProgramId); 
    db.SetParameterValue(cmd, "xxx", item.CompanyId); 
    db.ExecuteNonQuery(cmd); 
    id = (int)db.GetParameterValue(cmd, "ccc"); 
    item.Id = id; 
}