Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提供对数据库处理程序的全局访问_C#_Persistence - Fatal编程技术网

C# 提供对数据库处理程序的全局访问

C# 提供对数据库处理程序的全局访问,c#,persistence,C#,Persistence,我正在用C#开发一个应用程序(但这与此无关,因为我不想使用任何语言工具),我需要处理与数据库的连接。我将避免在每个方法中显式创建连接,如: private void btnAnteprima_Click(object sender, EventArgs e) { SqlConnection myConnection = new SqlConnection("user id=***;" + "password=***;server=***;" +

我正在用C#开发一个应用程序(但这与此无关,因为我不想使用任何语言工具),我需要处理与数据库的连接。我将避免在每个方法中显式创建连接,如:

private void btnAnteprima_Click(object sender, EventArgs e) 
{
    SqlConnection myConnection = new SqlConnection("user id=***;" +
                   "password=***;server=***;" +
                   "database=***");
    myConnection.Open();
    SqlDataReader myReader = null;
    SqlCommand myCommand = new SqlCommand("select * from *** where IDCliente=*", myConnection);
    myReader = myCommand.ExecuteReader();

    while (myReader.Read())
    {
        MessageBox.Show(myReader["xyz"].ToString());
    }           
}
我想:

private void btnAnteprima_Click(object sender, EventArgs e) 
{
    SqlReader myReader = DbFactory.ExecuteQuery("select * from *** where IDCliente=*");

    while (myReader.Read())
    {
        MessageBox.Show(myReader["xyz"].ToString());
    }           
}

据我所知,单例模式的使用在性能方面是无用的,甚至是有害的。我在工厂模式中徘徊以实现这一点,但我不知道如何做到最好。你有这样做的例子吗?我不想重新发明轮子,我只想使用正确的设计模式,了解轮子后面的内容。

看看Microsoft Enterprise Library的数据访问块


我很确定你使用C#的事实是相关的。每种语言都有自己的数据库抽象API和依赖注入框架,很难给出与语言无关的最佳解释。singleton反模式之所以不是一种不可测试模式,不是因为它的性能,而是因为它所导致的耦合和缺乏可测试性。我知道这一点,但我会将我的知识推广到框架API和工具之外……这是一种新的说法“我想重新发明轮子,而不是使用标准方式”?我不想重新发明轮子,我只想知道轮子是如何工作的。然后用C#和你的持久性框架来标记这个问题,因为每种语言/框架都有自己的轮子。