在类中关闭连接以简化SQL查询/更新的c#数据库连接的最佳方法

时间:2017-10-19 14:54:21

标签: c#

我正在学习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:添加了处理参数的代码]

如果对象被销毁(即在其范围崩溃后),我如何才能使连接关闭?

0 个答案:

没有答案
相关问题