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 属性可能不会被隐式更新。

于 2012-12-18T20:56:40.133 回答