2011-01-13 2 views
0

Я пытаюсь запустить два оператора SQL (MSSQL 2005), асинхронно в фоновом рабочем документе. Однако, когда я вызываю метод EndExecuteNonQuery на первом SqlCommand, я получаю ошибку «Синтаксис SQL около ошибки».Ошибка синтаксиса SQL при использовании SQLCommand.EndExecuteNonQuery

Вот мой код:

try 
{ 
    SqlCommand sqlCmd = uow.DataLayer.CreateCommand() as SqlCommand; 
    sqlCmd.CommandText = "DELETE FROM dbo.EligibilityRecordKeyValue WHERE EligibilityRecord IN " + 
    "(SELECT EligibilityRecord FROM dbo.EligibilityRecord WHERE Organization = '" + map.Organization.Oid + "')"; 
    IAsyncResult result = sqlCmd.BeginExecuteNonQuery(); 
    while (!result.IsCompleted) 
    { 
     worker.ReportProgress(0, "Deleting existing record keys"); 
     System.Threading.Thread.Sleep(200); 
    } 
    count = sqlCmd.EndExecuteNonQuery(result); 
} 
catch (SqlException ex) 
{ 
} 
catch (InvalidOperationException ex) 
{ 
} 
finally 
{ 
    worker.ReportProgress(2, String.Format("Existing {0} records keys deleted.", count)); 
} 

try 
{ 
    SqlCommand sqlCmd = uow.DataLayer.CreateCommand() as SqlCommand; 
    sqlCmd.CommandText = "DELETE FROM dbo.EligibilityRecord WHERE Organization = '" +  map.Organization.Oid + "'"; 
    IAsyncResult result = sqlCmd.BeginExecuteNonQuery(); 
    while (!result.IsCompleted) 
    { 
     worker.ReportProgress(0, "Deleting existing records"); 
     System.Threading.Thread.Sleep(200); 
    } 
    count = sqlCmd.EndExecuteNonQuery(result); 
} 
catch (SqlException ex) 
{ 
} 
catch (InvalidOperationException ex) 
{ 
} 
finally 
{ 
    worker.ReportProgress(5, String.Format("Existing {0} records deleted.", count)); 
} 

Он терпит неудачу на первом count = sqlCmd.EndExecuteNonQuery(result);

+0

Когда выполняется только первый, возникает проблема? – dzendras

+1

Вы уверены, что в вашем первом запросе есть 'пробел' между' WHERE' и 'EligibilityRecord'? –

+0

Вот что я подумал, но я не мог видеть ошибку :) Не 2 вопроса - проблема, даже не режим асинхронизации, а простая синтаксическая ошибка запроса :) – dzendras

ответ

0

Ok, добавив, кажется WAITFOR DELAY-х по обе команды SQL, что проблема решена.

sqlCmd.CommandText = String.Format("WAITFOR DELAY '00:00:05'; DELETE FROM dbo.EligibilityRecordKeyValue WHERE EligibilityRecord IN " + 
        "(SELECT EligibilityRecord FROM dbo.EligibilityRecord WHERE Organization = '{0}')", map.Organization.Oid); 

sqlCmd.CommandText = String.Format("WAITFOR DELAY '00:00:05'; DELETE FROM dbo.EligibilityRecord WHERE Organization = '{0}'", map.Organization.Oid); 

Кто-нибудь знает, почему это происходит?

Смежные вопросы