OleDbParameterCollection没有定义构造函数

时间:2014-03-16 01:11:00

标签: c# oledb

在我的项目中,我有一个DBAdapter类来处理数据库查询。

public class DBAdapter
{
    private OleDbConnection _connection;

    private void _Connect()
    {
        this._connection = new OleDbConnection();
        _connection.ConnectionString = ConfigurationManager.AppSettings["Accessconnection"];
        _connection.Open();
    }

    private void _Disconnect()
    {
        _connection.Close();
    }


    public DataTable Select(string query, OleDbParameterCollection parameters = null)
    {

        OleDbCommand cmd = new OleDbCommand();
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
        DataSet dataSet = new DataSet();
        DataTable dataTable = new DataTable();
        query = "SELECT " + query;

        if (parameters != null)
        {
            foreach (OleDbParameter parameter in parameters)
            {
                cmd.Parameters.Add(parameter);
            }
        }

        this._Connect();
        cmd.Connection = _connection;
        cmd.CommandText = query;

        if (parameters != null)  {
            cmd.Prepare();
        }
        dataAdapter.SelectCommand = cmd;
        dataAdapter.Fill(dataSet, "results");
        this._Disconnect();

        dataTable = dataSet.Tables["results"];
        return dataTable;
    }

}

为了执行准备好的查询,Select方法有一个optionnal OleDBParameterCollection参数。 然后,我的项目中的每个域对象都有多个Mapper,例如UserMapper,它使用DataAdapter类来运行查询(例如按id查找用户)。

    public class UserMapper : DataMapperAbstract
        {

            public User findByID(int id)
            {
                User user = new User()
                string query = "* FROM USER WHERE idUser = ?";
                OleDbParameterCollection parameters = new OleDbParameterCollection();
                parameters.Add(new OleDbParameter("idUser", OleDbType.Integer).Value = id);

                // Prepared query
                DataTable results = adapter.Select(query, parameters);
                this._populateData(user, results.Rows[0]);
                return user;
            }
    }

不幸的是,我在这一行有错误

   OleDbParameterCollection parameters = new OleDbParameterCollection();

VS说OleDbParameterCollection类型没有定义构造函数,我真的不明白这里有什么问题。也许我没有权限实例化OleDbParameterCollection,但在这种情况下,我应该如何将一组参数传递给我的DBAdapter方法?

2 个答案:

答案 0 :(得分:2)

OleDbParameterCollection没有公开我们可以访问的公共构造函数。它并不意味着以这种方式使用,只需将您的方法参数更改为接受OleDbParameter而不是OleDbParameterCollection的列表:

public DataTable Select(string query, List<OleDbParameter> parameters = null)
{
}

然后相应地使用它:

List<OleDbParameter> parameters = new List<OleDbParameter>();
parameters.Add(new OleDbParameter("idUser", OleDbType.Integer){ Value = id });

// Prepared query
DataTable results = adapter.Select(query, parameters);

答案 1 :(得分:0)

OleDbParameterCollection没有公共构造函数。

当实例化OleDbDataAdapter对象时,它会在SelectCommand对象中自动为您创建OleDbParameterCollection对象。

以下是我发现的MSDN代码:

OleDbDataAdapter adapter =
new OleDbDataAdapter(queryString, connection);
// Set the parameters.
adapter.SelectCommand.Parameters.Add(
        "@CategoryName", OleDbType.VarChar, 80).Value = "toasters";

这是链接: http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparametercollection(v=vs.110).aspx

您可能需要稍微修改运行查询的方式。但是,看起来你已经有了一个适配器对象,所以它不应该太难。