在我的项目中,我有一个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方法?
答案 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
您可能需要稍微修改运行查询的方式。但是,看起来你已经有了一个适配器对象,所以它不应该太难。