我是WPF(以及一般的应用程序开发)的新手,我想连接到我的数据库并使用该连接在我的所有Model类中查询它。我在
后面的主窗口代码中编写了连接字符串public partial class MainWindow : Window
{
DBConnection db = new DBConnection();
public MainWindow()
{
InitializeComponent();
Connect();
}
...etc
DBConnection类看起来像这样
class DBConnection
{
private OracleConnection connection;
private OracleCommand command;
private bool autoDisconnect;
public void Connect(bool autoDisconnect = true)
{
this.autoDisconnect = autoDisconnect;
try
{
if (connection == null)
{
connection = new OracleConnection("CONNECTION DETAILS");
}
if (connection.State != ConnectionState.Open)
{
connection.Open();
}
}
catch (OracleException ex)
{ }
}
..... etc
但我想在某处创建连接和db
对象,这样我的所有模型都可以调用DBConnection
的类,而不必每次都创建一个新对象
例如,这是一个模型
public class Authentication
{
string username;
string password;
public static bool Authenticate(string UserName, string Password)
{
db.SetSQL("SQL STATEMENT HERE");
db.ExecuteTransactions();
}
...etc
其中SetSQL
和ExecuteTransactions
是DBConnection类的方法
那么在哪里以及如何(简单地)连接到数据库以便它在整个应用程序中保持不变?它只有一个窗口,有不同的UserControls,所以我认为可以在主窗口代码后面连接
答案 0 :(得分:0)
我也使用财产。 像这样的东西
static private DBConnection _db=null;
static public DBConnection Db
{
get
{
if (_db==null) Db=new DBConnection(); //You can also add connection or any initialisation
return _db;
}
set { _db = value; }
}
答案 1 :(得分:0)
但是保持联系并不好 并且跨多个查询共享连接并不好 如果你想在将来做一些平行的事情怎么办? 建议的方式是连接池非常有效 我知道这似乎很多
static private dbConnectionString = "CONNECTION DETAILS";
using (OracleConnection connection = new OracleConnection(dbConnectionString))
{
try
{
connection.Open();
using (OracleCommand command = connection.CreateCommand())
{
......
using(OracleDataReader rdr = command.ExecuteReader())
{
}
}
}
catch(OracleException ex)
{
}
finally
{
connection.Close();
}
}
或者您可以将其包装在DBConnection类中
using (DB Connection dbConnection = new DBConnection())
{
}
并且通常不会对单个sql语句使用ExecuteTrasaction
这是不一个好主意
db.SetSQL("SQL STATEMENT HERE");
应该使用parmeterized查询
我知道你想让事情变得简单,但事实并非如此
您可能希望看起来像实体框架