使用C#中的OleDbCommandBuilder更新包含@符号的列名的表

时间:2011-01-07 00:30:57

标签: c# .net sql-server oledb oledbcommand

问候伟大的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搜索了这件事。我知道在列名中包含@符号有点不寻常,但这就是我已经处理过的手。

有什么想法吗?好吗? :)

1 个答案:

答案 0 :(得分:1)

您应该能够在命令构建器中指定QuotePrefixQuoteSuffix字符:

cmd.QuotePrefix = "[";
cmd.QuoteSuffix = "]";

执行此操作后,它构建的命令将在所有名称(列和表)周围放置括号。我认为它没有提及,但请确保您使用的前缀和后缀值对底层数据库有效。例如,对于某些数据库,可能需要使用双引号而不是括号。