C# 使用c验证Microsoft Access SQL中是否保留了一个字

C# 使用c验证Microsoft Access SQL中是否保留了一个字,c#,sql,sql-server,oledb,C#,Sql,Sql Server,Oledb,我正在为我的学校项目建立一个DAL班。 主要的想法是它是通用的。 在我谈到保留词之前,一切都很好。 我制作了一个使用密码的方法,密码是一个保留字 public static void AddRow(string name, object[] values) { string com = "SELECT TOP 1 * FROM " + name; DataTable dt = OleDbhelper.fill(com); if

我正在为我的学校项目建立一个DAL班。 主要的想法是它是通用的。 在我谈到保留词之前,一切都很好。 我制作了一个使用密码的方法,密码是一个保留字

       public static void AddRow(string name, object[] values)
    {
        string com = "SELECT TOP 1 * FROM " + name;
        DataTable dt = OleDbhelper.fill(com);
        if (dt.Columns.Count - 1 == values.Length)
        {
            string sql = "INSERT INTO " + name + " (";
            for (int i = 1; i < dt.Columns.Count; i++)
            {
                if (dt.Columns[i].ColumnName == "Password")
                    sql += "[";
                sql += dt.Columns[i].ColumnName;
                if (dt.Columns[i].ColumnName == "Password")
                    sql += "]";
                if (i != dt.Columns.Count - 1)
                    sql += ",";
                else
                    sql += ") ";
            }
            sql += "VALUES (";
            for (int i = 0; i < values.Length; i++)
            {
                if (dt.Columns[i + 1].DataType.ToString() == "System.String")
                    sql += "'" + values[i].ToString() + "'";
                else
                    sql += values[i].ToString();
                if (i != dt.Columns.Count - 2)
                    sql += ",";
                else
                    sql += ") ";
            }
            OleDbhelper.Execute(sql);
        }
    }
例如,将行插入一个可以处理所有保留字级别的内容。 我已经上网查了好几个小时了,尝试了不同的方法,但我还是找不到方法。 我也找不到完整的更新列表,只有部分列表只包含部分保留字


我在这里迷路了。我很乐意接受关于如何解决此问题的任何想法。

您无需检查列名是否为保留字,即可决定是否在其周围放置[]s。无论名称如何,只需添加括号是安全的,这不会破坏任何内容

所以这部分代码:

if (dt.Columns[i].ColumnName == "Password")
    sql += "[";
sql += dt.Columns[i].ColumnName;
if (dt.Columns[i].ColumnName == "Password")
    sql += "]";
可以改写为:

sql += "[" + dt.Columns[i].ColumnName + "]";

为什么不在列名和表名周围放上[]s,不管它是否保留?sql+=[+dt.Columns[i].ColumnName+]@Rhumborl的想法是该方法适用于任何表。所以我需要它自己去发现它的保留是否准确-在一个非保留字周围放上括号不会破坏任何东西-从MyRandomTableName中选择*与从[MyRandomTableName]@Rhumborl中选择*是一样的,所以你的意思是在每个字周围放上[]?@Rhumborl:请重新发布你的评论作为答案,这样它就可以被投票和接受;
sql += "[" + dt.Columns[i].ColumnName + "]";