2009-08-02 13 views
1

誤って生成されたパラメータ名のためにデータの保存に問題があります。無効なパラメータ名

テーブルにはフィールド "E-mail"があり、クラスラッパーが生成されると、InsertCmdはパラメーターの1つとして "@ E-mail"を使用します。 SQL Serverでは、これは不正であり、例外が生成されます。

私はパラメータ名を単に "@Email"に変更する方法のためにSubSonicを使いこなしましたが、ParameterNameプロパティは読み取り専用です。

私はSubSonic 2.2を使用しており、内部で修正するためのソースはありません。

アイデア?

TIA

+0

名前を変更できますか? –

+0

オプションではない名前の名前を変更します。私はMS AccessからSQLにユーザーデータを移行するアプリケーションを作成しています。彼らは500以上のMS Accessデータベースを持っています。私は各DBの列の名前を変更する必要があります。 OUCH。 –

答えて

2

は、私は、ソースコードを引っ張ってSVNを使用して私の仲間を得、そして予想通り、SSソースのバグを発見しました。

列名がクラスラッパーに設定されている

は、ColumnNameプロパティのsetterは、あなたが正しく を使用するためのParamaterNameプロパティを設定する「のParameterName = Utility.PrefixParameter(Utility.StripNonAlphaNumeric(COLUMNNAME)、Table.Provider);」 。これにより、電子メール列にハイフンなどの不正な文字がすべて削除されます。

BUT ... SQLコマンドが作成されるとき、プロパティParameterNameは使用されません。ここにSQLDataProvider.GetInsertSQL、行のコードのコードです。

pars.Append(Utility.PrefixParameter(colName、this));

Iは

pars.Append(col.ParameterName)にこれを変更し、

これで問題はソートされました。

可能性のあるソリューションがありがとうございました。

関連する問題