我正在学习C#,并且已经创建了一个类来简化我必须执行的操作以执行SQL查询并循环遍历结果以及运行更新。在这两种情况下,都要传递SQL和可选的参数列表。
这是进行简化的类:
public db(string pQuerySQL, List<string> pParams=null) {
//Params array replace @PARAM1, @PARAM2, @PARAM3 (etc) in the SQL
//code would be: com.Parameters.Add(new OleDbParameter("@PARAM1", pParams[0]));
con= new OleDbConnection(db.conString);
com = con.CreateCommand();
com.CommandText = pQuerySQL;
addParamsToCom(lCom, pParams);
con.Open();
rs = com.ExecuteReader();
}
public static void runUpdate(string pUpdateSQL, List<string> pParams = null) {
//Params array replace @PARAM1, @PARAM2, @PARAM3 (etc) in the SQL
OleDbConnection lCon = new OleDbConnection(db.conString);
OleDbCommand lCom = lCon.CreateCommand();
lCom.CommandText=pUpdateSQL;
addParamsToCom(lCom, pParams);
lCon.Open();
lCom.ExecuteNonQuery();
lCon.Close();
}
private static void addParamsToCom(OleDbCommand pCom,List<string> pParams = null) {
if(!(pParams is null)) { //Add params to the SQL
for(int i = 0;i<pParams.Count;i++) {
pCom.Parameters.AddWithValue("@PARAM"+(i+1).ToString(), pParams[i]);
}
}
}
优点是类暴露了DataReader(记录集),因此您可以执行db.rs.Read()或使用它具有的任何其他功能。
传递参数很容易。带有一个参数的示例(要传递none,省略第二个参数并只传递SQL):
db db = new db(
"SELECT trackTitle FROM tracks WHERE [band]=@PARAM1",
new List<String> { "Sisters of Mercy" }
);
while (db.rs.Read()){
Debug.WriteLine(db.rs["trackTitle"]);
}
db.close();
[20171027:添加了处理参数的代码]
如果对象被销毁(即在其范围崩溃后),我如何才能使连接关闭?