2014-03-28 52 views
2

我正在使用Windows應用程序。在這裏,我需要在運行時在MS Access 2007中創建存儲的查詢(即在按鈕單擊時)選擇,插入,更新,刪除,如何根據參數調用表單中的查詢?如何在運行時使用C#在MS Access中創建存儲查詢

cmmd.CommandText = "CREATE TABLE tblCustomers ([CustomerID] AUTOINCREMENT PRIMARY KEY, CustomerName Text(50), [CategoryID] Long REFERENCES tblCategories (CategoryID), [IsActive] YesNo, [ModifiedBy] Long REFERENCES tblUsers (UserID), [ModifiedDate] Date)"; 
cmmd.ExecuteNonQuery(); 

//Above Create table tblCustomers executed successfully, 

cmmd.CommandText = @"CREATE PROCEDURE prAddCustmer (CustName Text(50), CatID Long, Inact No, ModBY Long, ModDate date) AS INSERT INTO tblCustomers (CustomerName , CategoryID, Inactive, ModifiedBy, ModifiedDate) VALUES(CustName, [CatID], [Inac], [ModBy], [ModDate]);"; 
cmmd.ExecuteNonQuery(); 
//But got error in Create Procedure prAddCustomers, Please find error in the Stored query and suggest the correct answer 
//Syntax error in PARAMETER clause. 
+0

你的問題不明確。你想調用一個已經存在於你的數據庫中的查詢,或者你想在你的數據庫中創建一個查詢嗎? – Steve

+0

我需要先創建存儲的查詢,然後我應該從其他實例調用它。首先我需要創建數據庫及其對象,如表,首先存儲查詢。現在我創建了數據庫和表格,並保留了查詢。 – Sanjeev4evr

回答

5

如果你想在你的Access數據庫中創建一個新的存儲查詢,您應該簡單地準備命令並執行它。

例如,假設您有客戶表,並且您想要使用查詢檢索單個客戶的記錄。

要創建查詢

string cmdText = @"CREATE PROCEDURE Customer_SelectOne (custID Long) as 
    SELECT * FROM Customers WHERE IDCustomer = [custID]"; 
OleDbCommand cmd = new OleDbCommand(cmdText, connection); 
cmd.ExecuteNonQuery(); 

要調用查詢,它再是一個簡單的命令標記爲CommandType = CommandType.StoredProcedure

string cmdText = "Customer_SelectOne"; 
OleDbCommand cmd = new OleDbCommand(cmdText, connection); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("custID", customerID); 
OleDbDataReader reader = cmd.ExecuteReader(); 

上面的例子是非常簡單的。對於更復雜的情況,您需要查看MS-Access Data Definition Language區域中的參考。

編輯

語法:

CREATE PROCEDURE ProcName 
       (optional list of parameters with type and size for Text) 
        AS 
       (Valid SQL Statement using the optional parameters list) 

所以這應該是你的 'prAddCustomers'

cmmd.CommandText = @"CREATE PROCEDURE prAddCustomers 
        (CustName Text(50), 
         CatID Long, 
         IsActive BIT, 
         ModBY Long, 
         ModDate DATETIME) 
        as 
        INSERT INTO tblCustomers 
         (CustomerName, CategoryID, IsActive, ModifiedBy, ModifiedDate) 
        VALUES([CustName], [CatID], [IsActive], [ModID],[ModDate])"; 
+0

謝謝@Steve – Sanjeev4evr

+0

Hi @Steve,我添加了插入語句,它有錯誤,請再次檢查問題並提出如何解決它。 – Sanjeev4evr

+0

這是一個不同的問題。你的SQL語法是錯誤的。嘗試在MS-Access中編寫相同的查詢並複製/粘貼您的代碼。我還看到,您不能正確地將參數傳遞給您的查詢。 (它們應該在AS之前使用類型)仔細查看我的示例 – Steve

相關問題