当我尝试从方法返回命令时,Ado.net数据提供程序抛出错误

时间:2012-12-18 20:45:42

标签: c# ado.net sqlbase

我很抱歉标题不好,不确定如何完整地描述问题。

我正在使用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也会出现同样的问题。

1 个答案:

答案 0 :(得分:1)

我会尝试在你的方法中初始化SQLBaseCommand,就像你在第一个例子中一样。

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

有或没有构造函数参数的构造函数可能有一个非常不同的实现。例如,Parameters属性可能不会隐式新建。