2013-02-07 42 views
1

我在訪問看起來像這樣創建的查詢......存儲過程/參數化查詢在訪問,並傳遞參數

SELECT project_master.ProjectID, project_master.OracleNum, project_master.BudgetYear, project_master.ProjectNum, project_master.Description, project_master.Description, project_master.Location, project_master.Region, project_master.ContactOwner, project_master.ContactDesigner, project_master.ProjectPriority, project_master.StartDate, project_master.InitialCloseDate, project_master.CurrentBonus, project_master.CurrentQty, project_master.TotalQty, project_master.TotalQty, project_master.SpendingYTD, project_master.SpendingLTD, project_master.SpendingAnnualBudget, project_master.SpendingForecast, project_master.SpendingMinimumForecast, project_master.SpendingRemainingCommitted, project_master.SpendingSaveOver, project_master.SpendingPushPull, project_master.IsCanceled, project_master.UserComments, project_master.tmp_reporting_selected, project_master.rep_header, project_master.rep_budget, project_master.rep_work_completed, project_master.rep_work_planned_completed, project_master.rep_variance_reason, project_master.rep_work_to_complete, project_master.rep_cutovers, project_master.rep_issues_resolution, project_master.rep_variance_reason1, project_master.rep_work_to_complete1, project_master.rep_cutovers1, project_master.rep_issues_resolution1 FROM project_master WHERE (((project_master.ProjectID)=[projectID])); 

現在我不熟悉的任何訪問,我想做一個存儲過程,但我沒有看到任何選擇這樣做。我創建的這個查詢似乎採用了projectID參數,但是當我嘗試在VB.NET中調用它並將其傳遞給參數時,我得到表中的每條記錄而不是我想要的。

Public Shared Function GetProjectByID(ByVal projectID As Integer) As DataTable 
     Dim paramaterList As New List(Of DataParameter) 
     paramaterList.Add(New DataParameter("@projectID", projectID, ParameterDirection.Input, OleDb.OleDbType.Integer)) 
     Return DAL.GetDataTableUsingReader("get_project_by_id", paramaterList) 
End Function 

Public Shared Function Create(ByVal projectID As Integer) As Project 
     If projectID < 1 Then 
      Throw New ArgumentException("The project ID is invalid.") 
     End If 
     Dim dt As DataTable = ProjectSQL.GetProjectByID(projectID) 
     If dt.Rows.Count < 1 Then 
      Throw New DataException("No project record found by the provided ID.") 
     End If 
     Return Repackage(dt)(0) 
End Function 

Friend Shared Function Repackage(ByVal dt As DataTable) As List(Of Project) 
    Dim projectList As New List(Of Project) 
    For i As Integer = 0 To dt.Rows.Count - 1 
     Dim p As New Project 
     Dim row As DataRow = dt.Rows(i) 
     p.ProjectID = Convert.ToInt32(row("ProjectID")) 
     p.OracleNum = Convert.ToString(row("OracleNum")) 
     p.BudgetYear = Convert.ToInt32(row("BudgetYear")) 
     'etc... 
     projectList.Add(p) 
    Next 
    Return projectList 
End Function 

基本上,我調用Create()方法,並傳遞一個整數,但我得到恢復,而不只是一個記錄所有記錄。

回答

2
WHERE (((project_master.ProjectID)=[projectID])) 

當數據庫引擎看到[projectID],它不知道你想這是個參數。它認爲你指的是同名的領域。所以它返回project_master.ProjectID等於它自己的每一行,這應該是ProjectID不爲空的所有行。

爲參數指定一個不同的名稱,該名稱與數據源中的任何字段都不匹配。

​​
+0

作品,謝謝你的幫助! –