我期望我的代碼要做的是收集SQLMigrationFl字段中具有'I'的前十條記錄,然後通過刪除'I'值來處理這十條記錄。以下是處理這個問題的部分代碼。OleDB查詢沒有返回所有結果
string inProgressQuery = "SELECT TOP 10 IDType, ID, Program, Date, Body,
AcctNo, ANPACAcctID, ANPACClientID, TEAMID,
ImportDate, AnnualReview, TeamGUID,
ANPACClientLastName, ANPACClientFirstName, " +
"PolicyNumber, AccountOwnerLastName,
AccountOwnerFirstName, SCRACF, SCDateTime, NoteID
FROM NoteTable WHERE SQLMigrationFl = ?";
command = new OleDbCommand(inProgressQuery, connection);
command.Parameters.AddWithValue("SQLMigrationFl", "I");
reader = command.ExecuteReader();
if(reader.HasRows)
{
while(reader.Read())
{
//clear the In Progress flag
query = "UPDATE NoteTable SET SQLMigrationFl = ? WHERE
NoteTable.NoteID = " + reader[19].ToString();
command = new OleDbCommand(query, connection);
command.Parameters.AddWithValue("SQLMigrationFl", DBNull.Value);
reader = command.ExecuteReader();
}
}
我在找的是查詢返回一個值並對其進行處理。然後在五秒內找到另一條記錄並重新處理該記錄。 *五秒只是我們在代碼中設置的延遲,以檢查更多待處理的記錄。它一次處理一條記錄,而不是一次抓取10條記錄,並在同一循環內同時處理這些記錄。我的代碼或查詢有問題嗎?
感謝您的幫助。
您應該在使用'AddWithValue'或者完全不使用'AddWithValue'時指定類型。它可能會導致意想不到的結果。使用[OleDbType](https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype(v = vs.110).aspx)指定類型。 「SQLMigrationFl」也是單個值字段,或者如果「I」包含在該字段中的某處,是否意味着寫入?最後,你還可以在你的'UPDATE'語句中爲'NoteId'使用一個參數。 – Igor
你能提供一個OleDbType用法的例子嗎? SQLMigrationFl是一個單值字段。 –
while循環中的讀者行應該是一個command.executenonquery。() –