SSMS에 지쳐서 내 자신의 SQL 클라이언트를 작성했습니다. SSMS처럼 영향을받은 행 수를 캡처하려고하지만 ExecuteReader
이 완료되거나 EndExecuteReader
이 호출 될 때 SqlCommand.StatementCompleted
가 여러 번 제기됩니다. 일괄 처리의 문이 일정한 간격으로 완료되었지만 DONE_IN_PROC 메시지가 클라이언트에 대기 한 다음 연속적으로 발생시키는 대신 모든 메시지를 한 번에 덤프하는 것처럼 보입니다. 아니요 InfoMessage
이벤트는 실행을 통해 SqlConnection
에서 실행됩니다.여러 문장의 레코드 수 검색
위의 업데이트는 이탤릭체입니다.
말은, 그와 같은 SQL의 루프에서 행을 업데이트 문, 또는 뭔가를 :
WHILE 1=1
BEGIN
UPDATE tbl SET .... WHERE Id BETWEEN i AND i+10;
IF @@ROWCOUNT =0 BREAK;
SET i = i + 10;
END
SSMS 제대로 "(영향을받는 10 행)"초 w/E의 모든 X의 수를 표시
. UPDATE 전용 문이므로 판독기에서 오는 레코드가 없으므로SqlDataReader
을 사용하여 행을 계산할 수 없습니다.
SqlClient
라이브러리를 사용하면 가능합니까? 문제
단순화 된 코드는 다음과 같다 : 설명은 덜 명확하지만
class ExecuteWorker
{
public void Start(string query)
{
this._query = query;
this._thread.Start(this.Work);
}
void Work()
{
using(var conn = new SqlConnection(this._connStr))
{
conn.Open();
using(var command = conn.CreateCommand())
{
command.CommandText = this._query;
using(var reader = command.ExecuteReader())
{
while(reader.Read())
{
this._control.BeginInvoke(new Action(()=>{
// update UI
}));
}
}
}
}
}
}
비슷한 질문, here을 찾을 수 있습니다.
SQL 문을 실행하는 데 사용하는 코드는 무엇입니까? – theMayer
@theMayer 빵 & 버터 SqlClient : SqlConnection, SqlCommand, ExecuteReader. –
그것은 할 수 있습니다. 그러나 당신이하는 일에 대해 완전한 구현을보고 싶습니다. – theMayer