在我的项目中,我有一个处理数据库查询的 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 方法有一个可选的 OleDBParameterCollection 参数。然后,我的项目中的每个域对象都有多个映射器,例如 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 的方法?
OleDbParameterCollection不公开我们可以访问的公共(public)构造函数。它并不意味着以这种方式使用,只需更改您的方法参数以接受 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);
我是一名优秀的程序员,十分优秀!