1

问候伟大的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);

然后,当保存对 a 所做的更改时DataRow

adapter.Update(new DataRow[] { row });

它完全按照我想要的方式工作。数据库操作都非常简单,应用程序支持多种数据库格式,所以这是适合任务的方法。

我的问题是,当行包含名称中带有@符号的列时,此方法会失败。数据库模式在列名前面加上一个@符号来表示私有元数据,例如创建/修改日期和校验和。

当列名包含@符号时​​,该Update方法会抛出OleDbException

必须声明标量变量@created

伟大的。怎么办?

说真的,我已经用谷歌搜索了这个东西。我知道在列名中包含符号有点不寻常@,但这就是我遇到的手。

有任何想法吗?请问好看吗?:)

4

1 回答 1

1

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

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

之后,它构建的命令将在所有名称(列和表)周围加上括号。我想这不用说,但请确保您使用的前缀和后缀值对底层数据库有效。例如,对于某些数据库,可能需要使用双引号而不是括号。

于 2011-01-07T15:42:42.437 回答