2016-03-18 102 views
-1

我已經得到了這段代碼,我試着在一個accessdatabase數據表裏面指定具有payrollno的行[Holiday]。SELECT COUNT查詢錯誤

string CountHolidayQuery = "SELECT COUNT FROM [Holiday] WHERE PayrollNo = @PayrollNo"; 
var CountHoliday = new OleDbCommand(CountHolidayQuery, conn); 
CountHoliday.Parameters.AddWithValue("@PayrollNo", OleDbType.Integer).Value = GotPayroll; 
int TotalHolidays = Convert.ToInt32(CountHoliday.ExecuteNonQuery()); 

我得到這個錯誤,但我想我已經添加了參數?

拋出異常:「System.Data.OleDb.OleDbException」在System.Data.dll中 其它信息:沒有用於一個或多個必需參數給定值。

回答

3

嘗試

string CountHolidayQuery = 
    @"SELECT COUNT(*) 
     FROM [Holiday] 
     WHERE PayrollNo = @PayrollNo"; 

int TotalHolidays; 

using (var CountHoliday = new OleDbCommand(CountHolidayQuery, conn)) { 
    CountHoliday.Parameters.Add("@PayrollNo", OleDbType.Integer).Value = GotPayroll; 
    TotalHolidays = Convert.ToInt32(CountHoliday.ExecuteNonQuery()); 
} 
3

爲COUNT正確的語法是

string CountHolidayQuery = @"SELECT COUNT(*) 
     FROM [Holiday] WHERE PayrollNo = @PayrollNo"; 
var CountHoliday = new OleDbCommand(CountHolidayQuery, conn); 
CountHoliday.Parameters.Add("@PayrollNo", OleDbType.Integer).Value = GotPayroll; 
int TotalHolidays = Convert.ToInt32(CountHoliday.ExecuteNonQuery()); 

還請注意,我已經改變了呼叫AddWithValue用正確的添加傳遞的參數。考慮AddWithValue應該多多注意使用,因爲it is know as a source for subtle bugs

+1

發佈一個鏈接到一個著名的博客文章中解釋AddWithValue的問題的行爲。在本質上。 AddWithValue無法知道接收字段的數據類型是什麼。所以它使用傳遞參數的數據類型。然後數據庫引擎需要將其轉換回該字段所期望的數據類型。這些轉換對於獲得正確結果都至關重要。有時他們不像您想象的那樣工作(特別是使用日期和小數點/浮點值) – Steve