查询数据库时如何停止重复相同的代码
How can I stop repeating the same code when querying a database
我正在用 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
字符串可以是任何东西。问题是每个查询都需要从用户界面 class 传递给它的不同参数,并且 db.addParameter
调用的次数对于一个 table 或另一个查询来说是不同的。
我知道这很基础,但我就是做不到。我真的希望这些方法(每次我向应用程序添加功能时它们都会成倍增加)减少到一个可重用的方法。请帮助
考虑使用像 NHibernate 或 Entity Framework 这样的 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;
}
现在调用如下:
methodName("Insert...", new Dictionary<string, string> {{"Id", ID }};
我正在用 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
字符串可以是任何东西。问题是每个查询都需要从用户界面 class 传递给它的不同参数,并且 db.addParameter
调用的次数对于一个 table 或另一个查询来说是不同的。
我知道这很基础,但我就是做不到。我真的希望这些方法(每次我向应用程序添加功能时它们都会成倍增加)减少到一个可重用的方法。请帮助
考虑使用像 NHibernate 或 Entity Framework 这样的 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;
}
现在调用如下:
methodName("Insert...", new Dictionary<string, string> {{"Id", ID }};