C# 查询数据库时,如何停止重复相同的代码
我正在用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
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参数的数据类型的期望,您也可以使用字典
在其中输入任何内容。我刚刚检查过,它期望字符串、对象
,所以我会这样做