Как открыть и закрыть соединение с базой данных (.db), которое хранится в проводнике сервера с использованием кода C# в Visual Studio?

Ссылка на закрытое соединение

Ссылка на свойства закрытого соединения

Следующий код представляет собой уровень доступа к данным для приложения, которое пишется. В коде есть два метода, делающие две попытки подключения, используя OdbcConnection а также OdbcDataAdapter, в файл базы данных.db, который задан в локальном пути к файлу и перенесен в Соединения данных проводника Visual Studio Server:

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;
        }
    }
}

Дело в том, что этот код работает и функционирует довольно хорошо... но..

Data Connection (база данных) начинается с закрытия при открытии решения. Ссылки на изображения выше показывают, что я имею в виду.

Проблема в том, что мой код не работает, если это соединение не "открыто"

connection.Open(); не открывает это соединение, даже если они имеют одинаковую строку соединения при создании. Открытие соединения состоит из ручного щелчка правой кнопкой мыши базы данных, указанной в Data Connections, и нажатия кнопки "Обновить".

Так...

Есть ли способ, которым этот правый клик можно сделать с помощью кода? Могу ли я открыть соединение, как если бы я подключился, чтобы сказать... SQL Server? Иначе, что произойдет, когда я скомпилирую и опубликую код? Сохраняется ли база данных в приложении и реагирует на код connection.Open(); или когда DataAdapter открывает соединение?

1 ответ

Просто нужно было поместить файл базы данных в bin\debug начальной папки проекта и изменить путь подключения на "DBF=Training1.db;UID=dba;PWD=sql", мой плохой. Извините, что заняло так много времени, чтобы опубликовать ответ после того, как я его решил

Другие вопросы по тегам