c# - 它是一种获取SQL关键字(保留字)的编程方式吗?

标签 c# sql sql-server-2008 keyword reserved-words

我需要验证以编程方式创建的 SQL 列的名称...

应该有 2 个验证规则:

  1. Name 不应是 C# 关键字
  2. 名称 不应是 SQL 关键字(SQL Server 2008 R2)

第一个规则的解决方案很好:

CSharpCodeProvider 类具有IsValidIdentifier 方法,这使得验证的实现变得容易。

(例如:

string myColumnName = "blabla";
var isValid = _cSharpCodeProvider.IsValidIdentifier(myColumnName);

)


第二条规则的解决方案有点冗长:

我发现进行谷歌搜索的唯一方法是从 MSDN - Reserved Keywords (Transact-SQL) SQL Server 2008 R2 中获取关键字

要构建一个将返回所有这些关键字的 string[] 属性...

(例如:

public static class SqlReservedKeywords {

     public static string[] SqlServerReservedKeywords {
        get { return SqlServerKeywords; }
     }

     private static readonly string[] SqlServerKeywords = new[] { 
        "ADD","EXISTS","PRECISION",   

    //. . .

        "EXEC","PIVOT","WITH",
        "EXECUTE","PLAN","WRITETEXT"
     };
}

//外部代码

var isValid = SqlReservedKeywords.SqlServerReservedKeywords.Contains(myColumnName);

)


关于第二条验证规则的实现,你能给我一些建议吗? 这是一个好习惯吗? 也许它存在另一种实现方式,我没有通过谷歌搜索找到...

最佳答案

保留字是一个移动的目标。如果 dbms 不通过公共(public)接口(interface)公开它们,通常没有好的编程方式来访问它们。

如果您不想用方括号保护它们,您可能会合并在您当前使用的 SQL Server 版本中未保留但在某些 future 版本中保留的符号。

我认为您最好的选择是使用您的 dbms 提供的引用机制,因为它旨在处理这个问题。对于 SQL Server,这意味着方括号。

关于c# - 它是一种获取SQL关键字(保留字)的编程方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939731/

相关文章:

c# - 将 EditorFor 用于 List<T> 时客户端验证不显示消息

c# - 在C#中监视垃圾收集器

c# - 无法从 xamarin 中的 TableView RowSelected 加载 ViewController

c# - 对象类型不存在映射

sql-server - SQL Server 2008 - 删除默认用户后添加 Windows 帐户

sql-server-2008 - NHibernate LinqToHqlGenerator for SQL Server 2008 全文索引 'Containing' 关键字

c# - 返回 HttpResponseMessage 的 Web API 最佳方法

sql - 对SELECT运算符执行类似于 “table”的存储过程(MS SQL SERVER)

sql - 在分层 sql 中查找重复/重复的行

用于条件选择的 SQL 查询