我很抱歉标题不好,不确定如何完全描述这个问题。
我正在使用 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 也会出现同样的问题。