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

时间:2014-10-19 17:21:09

标签: 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 (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);
        }
    }

我想要做的是更换

if (dt.Columns[i].ColumnName == "Password")

排成一个可以处理所有保留字的东西(&#34; Level&#34;例如)。 我一直在检查互联网并尝试了几个小时的不同方法,但我仍然无法找到办法。 我也找不到完整的更新列表,只能找到仅包含部分保留字的部分列表。

我迷失在这里。我很乐意接受任何有关如何解决这个问题的想法。

1 个答案:

答案 0 :(得分:1)

您无需检查列名是否为保留字,以决定是否在其周围放置[]。只要添加任何名称的括号是安全的,这不会破坏任何东西。

所以代码的这一部分:

if (dt.Columns[i].ColumnName == "Password")
    sql += "[";
sql += dt.Columns[i].ColumnName;
if (dt.Columns[i].ColumnName == "Password")
    sql += "]";

可以改写为:

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