Jay*_*man 2 c# ddl ms-access database-schema
我有一个要求,我需要在c#中从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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果使用查询名称删除restrictions参数,conn.GetSchema("Views")则为每个查询返回一行.如果查询conn.GetSchema("Procedures")其他类型的查询(如插入,更新和DDL语句,则不会将其视为查询)row["PROCEDURE_DEFINITION"].
返回视图(查询)名称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();
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,OleDb CREATE DDL(数据定义语言)将查询指定为"过程",但架构表返回"VIEW_DEFINITION",并在"TABLE_NAME"列中返回查询名称.SELECT查询必须作为"Views"检索,其他类型的查询必须作为"Procedures"检索; 但是,这两种类型都创建为PROCEDURE.
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |