0

問題を完全に説明する方法がわからないため、タイトルが悪くて申し訳ありません。

SQLBase NET データ プロバイダーを使用しています。

コマンドを作成してパラメーターを追加しようとすると、例外がスローされます

オブジェクトがオブジェクトのインスタンスに設定されていません

ただし、オブジェクトの外部でコマンドを作成すると、問題なくパラメーターを追加できます。

SQLBaseDatabaseclass は、基本的に接続を返し、コマンドを作成する、私が書いたラッパーです。

var db = new SQLBaseDatabase(ConfigurationManager.ConnectionStrings["UDSConnectionString"].ConnectionString);

このコードは動作します: 私はこのコードをHomeControllerテストとして作成しました。問題なくパラメータを追加できます。

var command = new SQLBaseCommand();
command.Connection = db.GetConnection() as SQLBaseConnection;
command.Parameters.Add(db.GetParameter(":1", "1234", DbType.String));

このコードは失敗します:

var parameters = new List<IDataParameter>();
parameters.Add(db.GetParameter(":1", "1234", DbType.String));
var cmd = db.GetCommand(db.GetConnection(), "Select * From DX_CODES Where (DX = :1)", parameters);

渡されたパラメーターを介してこのメ​​ソッドにパラメーターを追加しようとすると、オブジェクトが設定されていないというエラーがスローされます。

public IDbCommand GetCommand(IDbConnection connection, string sql, IEnumerable<IDataParameter> parameters)
{
    var command = new SQLBaseCommand(connection as SQLBaseConnection);            

    foreach (var parameter in parameters)
        command.Parameters.Add(parameter); // This throws an error. Command.Parameters is read only.

    command.CommandText = sql;

    return command;
}

コマンド パラメータは読み取り専用です

パラメータを作成する私のメソッドは次のとおりです

 public IDbDataParameter GetParameter(string name, object value, DbType type)
 {
     return new SQLBaseParameter(name, type, value);
 }

このエラーの原因となっている可能性のある c# で根本的に間違っているかどうかはわかりません。または、あるケースでは機能するが、他のケースでは機能しないことを考慮して、どのように修正できますか。

** 更新 ** SqlServer ADO.Provider でも同じ問題が発生します。

4

1 に答える 1

1

最初の例で行ったのと同じ方法で、メソッドで SQLBaseCommand を初期化してみます。

var command = new SQLBaseCommand();    
command.Connection = connection as SQLBaseConnection;

コンストラクターのパラメーターを使用する場合と使用しない場合で、そのコンストラクターの実装が大きく異なる可能性があります。たとえば、Parameters プロパティは暗黙的に newed されない場合があります。

于 2012-12-18T20:56:40.133 に答える