問題を完全に説明する方法がわからないため、タイトルが悪くて申し訳ありません。
SQLBase NET データ プロバイダーを使用しています。
コマンドを作成してパラメーターを追加しようとすると、例外がスローされます
オブジェクトがオブジェクトのインスタンスに設定されていません
ただし、オブジェクトの外部でコマンドを作成すると、問題なくパラメーターを追加できます。
SQLBaseDatabase
class は、基本的に接続を返し、コマンドを作成する、私が書いたラッパーです。
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 でも同じ問題が発生します。