如何使用 Visual Studio 中的 C# 代码打开和关闭与服务器资源管理器中保存的数据库 (.db) 数据连接的连接?

Posted

技术标签:

【中文标题】如何使用 Visual Studio 中的 C# 代码打开和关闭与服务器资源管理器中保存的数据库 (.db) 数据连接的连接?【英文标题】:How do I open and close a connection to a database(.db) Data Connection held within Server Explorer using C# code within Visual Studio? 【发布时间】:2016-05-22 10:56:45 【问题描述】:

Server Explorer closed connection reference

Closed connection properties reference

下面的代码是正在编写的应用程序的数据访问层。该代码有两种方法,使用OdbcConnectionOdbcDataAdapter 进行两次连接尝试,连接到在本地文件路径中设置并引入Visual Studio Server Explorer 数据连接的.db 数据库文件:

using System.Data;
using System.Data.Common;
using System.Data.Odbc;
using System.Windows.Forms;

namespace Data.DataAccess

    public class PatientDatabase
    
        public OdbcDataAdapter ConnectAndCreateDataAdapter()
        
            string selectCommand = "select * from patient";

            var connectionString = "Driver=SQL Anywhere 10;DBN=Training1;UID=dba;PWD=sql;Data Source=C:\\Projects\\Training\\Training1.4.2\\Training1.db;";

            OdbcConnection connection = new OdbcConnection(connectionString);
            connection.Open();

            var dataAdapter = new OdbcDataAdapter(selectCommand, connectionString);

            return dataAdapter;
        

        public void ConnectAndPopulateDataGridView(DataGridView dataGridView)
        
            BindingSource patientBindingSourceTest = new BindingSource();
            dataGridView.DataSource = patientBindingSourceTest;

            string selectCommand = "SELECT patient.first_name + ' ' + patient.last_name as patient_name, patient.patient_id, patient.address, patient.city, patient.state, patient.zipcode, patient.phone, patient.notes, patient.classification_id, patient_classification.description from patient, patient_classification right join patient on patient.classification_id = patient_classification.patient_classification_id";

            var connectionString = "Driver=SQL Anywhere 10;DBN=Training1;UID=dba;PWD=sql;Data Source=C:\\Projects\\Training\\Training1.4.2\\Training1.db;";

            OdbcConnection connection = new OdbcConnection(connectionString);
            connection.Open();

            var dataSet = new DataSet();

            var dataAdapter = new OdbcDataAdapter(selectCommand, connectionString);

            DataTableMapping patientTableMapping = new DataTableMapping("Table", "patient");
            dataAdapter.TableMappings.Add(patientTableMapping);
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("patient_id", "Patient ID"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("patient_name", "Patient Name"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("address", "Address"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("city", "City"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("state", "State"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("zipcode", "Zip Code"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("phone", "Phone"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("notes", "Notes"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("classification_id", "Classification ID"));
            patientTableMapping.ColumnMappings.Add(new DataColumnMapping("description", "Classification"));

            dataAdapter.Fill(dataSet);

            patientBindingSourceTest.DataSource = dataSet.Tables["patient"].DefaultView;

            dataGridView.Columns["Notes"].Visible = false;
            dataGridView.Columns["Patient ID"].Visible = false;
            dataGridView.Columns["Classification ID"].Visible = false;

            var commandBuilder = new OdbcCommandBuilder(dataAdapter);

            dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        
    

现在的问题是,这段代码运行良好,运行良好……但是……

打开解决方案时,数据连接(数据库)开始关闭。上面的图片链接显示了我所指的内容。

问题是我的代码不起作用,除非该连接是“打开”的

connection.Open(); 不会打开该连接,即使它们在创建时具有相同的连接字符串。打开连接包括手动右键单击数据连接中列出的数据库并单击“刷新”

所以...

有没有什么方法可以通过代码来完成这个右键单击?如果我要连接到说... SQL Server,我可以打开连接吗?否则,当我编译和发布代码时会发生什么?数据库是否保持在应用程序内构建并响应代码connection.Open();DataAdapter 打开连接时?

【问题讨论】:

【参考方案1】:

只需要把数据库文件放到启动项目文件夹的bin\debug中,把连接路径改成“DBF=Training1.db;UID=dba;PWD=sql”,我的错。抱歉,我解决了很久才真正发布答案。

【讨论】:

以上是关于如何使用 Visual Studio 中的 C# 代码打开和关闭与服务器资源管理器中保存的数据库 (.db) 数据连接的连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 中为迷宫设计项目制作 C# 中的图片框?

如何在 Visual Studio 2019 中为 C# WPF 切换 XAML 中的行注释

如何从Visual Studio中的UML类图生成C#源代码

如何在 Visual Studio、C# 项目的部署中包含文件和文件夹?

如何使用 Visual Studio 中的 C# 代码打开和关闭与服务器资源管理器中保存的数据库 (.db) 数据连接的连接?

怎样在visual studio 2008中的c#控制台中用console.writeline语句输出一个字符数组?用foreach循环怎么写