如何在查询数据库时停止重复相同的代码

时间:2016-03-23 12:26:05

标签: c# database architecture

我正在用C#编写我的第一个大型应用程序,随着它的发展,我开始在查询数据库的每个方法中重复相同的代码,或多或少是这样的:

public static bool methodName(string ID, string Name, //etc)
{
    bool success = false;
    DBConnection db = new DBConnection(); //Oracle connection class
    db.Connect(); //Connect to the database

    if (db.GetConnectionState())  //checks the connection
    {
        db.SetSql("//insert, delete, update, etc, each method is different");
        db.addParameter("id", ID);

        if (db.ExecuteTransactions())  //attempts to insert, delete, update, whatever
            success = true;
        else
            success = false;
    }
    else
        success = false;

    db.Dispose();

    return success;    
}

我只想要一个这样的方法,其中db.SetSql字符串可以是任何东西。问题是每个查询都需要从用户界面类传递给它的不同参数,并且对于一个或另一个表的查询,db.addParameter调用的数量会有所不同。

我知道这是非常基本的,但我无法得到它。我真的希望这些方法每次向应用程序添加一个功能时都会成倍增加,减少到一个可重用的方法。请帮忙

2 个答案:

答案 0 :(得分:2)

您可以使用字典作为参数;

public static bool methodName(string query, Dictionary<string, string> parameters)
{
    bool success = false;
    DBConnection db = new DBConnection(); //Oracle connection class
    db.Connect(); //Connect to the database

    if (db.GetConnectionState())  //checks the connection
    {
        db.SetSql(query);
        foreach(var param in parameters) db.addParameter(param.Key, param.Value);

        if (db.ExecuteTransactions())  //attempts to insert, delete, update, whatever
            success = true;
        else
            success = false;
    }
    else
        success = false;

    db.Dispose();

    return success;    
}

现在调用它如下:

methodName("Insert...", new Dictionary<string, string> {{"Id", ID }};

答案 1 :(得分:1)

考虑使用像NHibernate或Entity Framework这样的ORM。它为你做的事情。还要看一下使用像autofac这样的控制框架的反转耦合,你会好得多。