2014-03-28 51 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

相关问题