我有一个要求,我需要在 c# 中从 Access DB 读取查询,并检查 access db 查询是否有任何关键字,如“KEY”,如果它有关键字,我需要将其括在方括号中[]”。只是就像它是如何在 SQL 中完成的。
有人可以建议我怎么做吗?
最佳答案
您可以像这样检索查询文本:
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\...\myDB.mdb";
using (var conn = new OleDbConnection(connString )) {
conn.Open();
string[] restrictions = new string[] { null, null, "myQuery" };
DataTable schema = conn.GetSchema("Views", restrictions);
if (schema.Rows.Count > 0) {
DataRow row = schema.Rows[0];
string queryText = (string)row["VIEW_DEFINITION"];
Console.WriteLine(queryText);
}
}
如果您删除带有查询名称的限制参数,conn.GetSchema("Views")
为每个查询返回一行。如果您查询 conn.GetSchema("Procedures")
其他类型的查询,例如不被视为查询的插入、更新和 DDL 语句,将在 row["PROCEDURE_DEFINITION"]
中返回>。
View (查询)名称在 row["TABLE_NAME"]
中返回,过程名称在 row["PROCEDURE_NAME"]
中返回。
您可以像这样更新查询:
using (var conn = new OleDbConnection(connString)) {
conn.Open();
var cmd = new OleDbCommand("DROP PROCEDURE myQuery", conn);
cmd.ExecuteNonQuery();
cmd = new OleDbCommand("CREATE PROCEDURE myQuery AS SELECT * FROM myTable", conn);
cmd.ExecuteNonQuery();
}
奇怪的是,OleDb CREATE DDL(数据定义语言)将查询指定为“过程”,但模式表返回“VIEW_DEFINITION”,查询名称在“TABLE_NAME”列中返回。 SELECT 查询必须作为“Views”检索,其他类型的查询作为“Procedures”;然而,这两种类型都是作为过程创建的。
关于c# - 如何检索 Access 查询的查询定义(SQL 文本)并存储回已更改的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486257/