问候伟大的SO同志;
我正在尝试使用此代码对SQL Server数据库进行更改:
adapter = new OleDbDataAdapter(
Db.GetRecordSql(table.Name, recordId), Db.Connection);
OleDbCommandBuilder cmd = new OleDbCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds);
之后,保存对DataRow
所做的更改时:
adapter.Update(new DataRow[] { row });
它的工作方式与我希望它的工作方式完全一致。数据库操作都非常简单,应用程序支持多种数据库格式,因此这是适合任务的方法。
我的问题是,当该行包含名称中带有@
符号的列时,此方法会失败。数据库模式使用@
符号作为前缀,以表示私有元数据,例如创建/修改日期和校验和。
当列名包含@
符号时,Update
方法会抛出OleDbException
:
必须声明标量变量@created
大。现在怎么样?
说真的,我已经用Google搜索了这件事。我知道在列名中包含@
符号有点不寻常,但这就是我已经处理过的手。
有什么想法吗?好吗? :)
答案 0 :(得分:1)
您应该能够在命令构建器中指定QuotePrefix
和QuoteSuffix
字符:
cmd.QuotePrefix = "[";
cmd.QuoteSuffix = "]";
执行此操作后,它构建的命令将在所有名称(列和表)周围放置括号。我认为它没有提及,但请确保您使用的前缀和后缀值对底层数据库有效。例如,对于某些数据库,可能需要使用双引号而不是括号。