我正在为我的学校项目建立一个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;例如)。 我一直在检查互联网并尝试了几个小时的不同方法,但我仍然无法找到办法。 我也找不到完整的更新列表,只能找到仅包含部分保留字的部分列表。
我迷失在这里。我很乐意接受任何有关如何解决这个问题的想法。
答案 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 + "]";