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

C# 查询数据库时,如何停止重复相同的代码,c#,database,architecture,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 da

我正在用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
调用的数量将不同


我知道这很基本,但我就是搞不懂。我真的希望这些方法,每次我向应用程序添加一个特性时,它们都会以指数方式成倍增加,减少到一个可重用的方法。请帮助

考虑使用类似NHibernate或实体框架的ORM。它为你做这些事。还可以考虑使用autofac之类的工具将其与控制框架的反转进行耦合,这样您的情况会好得多

考虑使用类似NHibernate或实体框架的ORM。它为你做这些事。还可以考虑使用autofac之类的工具将其与控制框架的反转进行耦合,这样您的情况会好得多

您可以为参数使用字典

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;    
}
publicstaticbool方法名(字符串查询、字典参数)
{
布尔成功=假;
DBConnection db=new DBConnection();//Oracle连接类
db.Connect();//连接到数据库
if(db.GetConnectionState())//检查连接
{
db.SetSql(查询);
foreach(参数中的var param)db.addParameter(param.Key,param.Value);
if(db.ExecuteTransactions())//尝试插入、删除、更新等等
成功=真实;
其他的
成功=错误;
}
其他的
成功=错误;
db.Dispose();
回归成功;
}
现在请按如下方式称呼它:

methodName("Insert...", new Dictionary<string, string> {{"Id", ID }};
methodName(“插入…”),新字典{{“Id”,Id};

您可以使用字典来查找参数

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;    
}
publicstaticbool方法名(字符串查询、字典参数)
{
布尔成功=假;
DBConnection db=new DBConnection();//Oracle连接类
db.Connect();//连接到数据库
if(db.GetConnectionState())//检查连接
{
db.SetSql(查询);
foreach(参数中的var param)db.addParameter(param.Key,param.Value);
if(db.ExecuteTransactions())//尝试插入、删除、更新等等
成功=真实;
其他的
成功=错误;
}
其他的
成功=错误;
db.Dispose();
回归成功;
}
现在请按如下方式称呼它:

methodName("Insert...", new Dictionary<string, string> {{"Id", ID }};
methodName(“插入…”),新字典{{“Id”,Id};

代替使用
KeyValuePair[]
他可以传递一个
字典
。这很好,但有时值是int或DateTime,所以
字典
不起作用。不确定这是否是一个好的做法(或者它是否起作用),但我可以做一些类似于:
…methodName>的事情吗(string query,Dictionary paramString,Dictionary paramInt=0,…)
根据db.addParameter作为seond参数的数据类型所期望的,您也可以使用一个
字典,您可以在其中放入任何内容。我刚刚检查过,它期望
字符串,对象
,因此我将这样做,而不是使用
KeyValuePair[]
他可以传递一个
字典
。这很好,但有时值是int或DateTime,因此
字典
不起作用。不确定这是否是一个好的做法(或者它是否起作用),但我可以做一些类似的事情:
…方法名(字符串查询,字典参数字符串,字典参数=0,…)
根据db.addParameter
作为seond参数的数据类型的期望,您也可以使用
字典
在其中输入任何内容。我刚刚检查过,它期望
字符串、对象
,所以我会这样做