我很抱歉标题不好,不确定如何完整地描述问题。
我正在使用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也会出现同样的问题。
答案 0 :(得分:1)
我会尝试在你的方法中初始化SQLBaseCommand,就像你在第一个例子中一样。
var command = new SQLBaseCommand();
command.Connection = connection as SQLBaseConnection;
有或没有构造函数参数的构造函数可能有一个非常不同的实现。例如,Parameters属性可能不会隐式新建。