1

素晴らしいSOの仲間に挨拶します。

このコードを使用してSQLServerデータベースに変更を加えようとしています。

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 });

それは私が望むように正確に機能します。DB操作はすべて非常にシンプルで、アプリは複数のデータベース形式をサポートしているため、これがタスクに適した方法です。

@私の問題は、行に名前に記号が含まれる列が含まれている場合、このメソッドが失敗することです。データベーススキーマ@は、作成/変更日やチェックサムなどのプライベートメタデータを示すために、列名の前に記号を付けます。

列名に@符号が含まれている場合、メソッドは:Updateをスローします。OleDbException

スカラー変数@createdを宣言する必要があります

素晴らしい。それで?

真剣に、私はこのことをググって死にました。列名に記号を含めるのは少し珍しいことです@が、それが私が扱ってきた手です。

何か案は?かなりお願いしますか?:)

4

1 に答える 1

1

QuotePrefixコマンド ビルダーでおよびQuoteSuffix文字を指定できるはずです。

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

それを行った後、それが構築するコマンドは、すべての名前 (列とテーブル) を括弧で囲みます。言うまでもありませんが、使用する接頭辞と接尾辞の値が基礎となるデータベースに対して有効であることを確認してください。たとえば、一部のデータベースでは、括弧の代わりに二重引用符を使用する必要がある場合があります。

于 2011-01-07T15:42:42.437 に答える