Как подключить базу данных SQL server express к VS 2017

Я продолжаю сталкиваться с проблемами, просто пытаясь установить соединение из моей программы c# в Visual Studio 2017 Express с небольшой локальной базой данных с одной таблицей, созданной в Sql Server Express. Я хотел бы подключить его в качестве источника данных в Entity Framework в моем решении (которое находится в c#). Я искал MSDN и этот сайт в течение нескольких дней, но не нашел способа решить эту проблему.

проблема в том, что когда я прохожу через мастер модели данных сущности (существующая база данных) и иду в установите новое соединение, выберите "файл базы данных Microsoft SQL Server (SqlClient)" и перейдите к моей базе данных -- тестовое соединение генерирует ошибку:

невозможно открыть физический файл "C:Program файлыMicrosoft SQL ServerMSSQL13.Именем sqlexpressMSSQL данныхданныеданных mydatabase.МДФ." Ошибка операционной системы 5: "5 (Доступ запрещен.)". Попытка присоединения базы данных с автоматическим именем к файлу C:Program файлыMicrosoft SQL ServerMSSQL13.Именем sqlexpressMSSQL данныхданныеданных mydatabase.МДФ неудачный. База данных с таким именем уже существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.

Я запускаю Visual Studio как администратор (это прошло мимо предыдущей проблемы, которая даже не позволила бы мне перейти к базе данных без запроса сообщения об ошибке, что у меня не было разрешения на открытие файла базы данных).

Я могу просматривать свою базу данных, ее таблицу и данные в Обозревателе объектов SQL Server в Visual Studio-независимо от того, Я запускаю его как администратор или нет. Не уверен, что это важно. Я новичок во всем этом, так что извините, если я пропустил что-то очевидное.

2 ответов


выяснил мою проблему: в Visual студии "Добавить новый источник данных" мастера, вариант я оставил выбор был "Майкрософт SQL сервер баз данных файла", потому что его описание "используйте этот выбор, чтобы добавить файл базы данных к локальному SQL серверу экземпляра (в том числе Microsoft SQL, Экспресс) с помощью .С NET Framework поставщик данных для SQL-сервера."

однако, и я не уверен, почему, это был неправильный выбор.

Я попытался выбрать " другое" вместо.

затем на следующей странице введите ".\SQLExpress " в качестве имени сервера (указано на connectionstrings.com/sql-server/ ...Спасибо за лидерство @ryguy72!)

затем в разделе "Подключение к базе данных" появился мой локальный список баз данных, включая ту, которую я создал уже с помощью SSMS.

тестовое соединение наконец-то сработало!


ты здесь?

https://www.connectionstrings.com/sql-server/

попробуйте с самым простым сценарием (без безопасности).

сервер=myServerAddress;базы данных=базы данных mydatabase;параметр trusted_connection=истина;

вот сценарий C#, который попадает в БД SQL Server на моей машине.

Excel для DGV:

        private void button1_Click(object sender, EventArgs e)
        {

            DataTable table = new DataTable();
            string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"",
            "C:\Users\Ryan\Desktop\Coding\DOT.NET\Samples C#\Export DataGridView to SQL Server Table\Import_List.xls");
            using (OleDbConnection dbConnection = new OleDbConnection(strConn))
            {
                using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", dbConnection)) //rename sheet if required!
                    dbAdapter.Fill(table);
                dataGridView1.DataSource = table;
                int rows = table.Rows.Count;
            }

            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.Columns["FName"].DataPropertyName = table.Columns["FName"].ColumnName;
            dataGridView1.Columns["LName"].DataPropertyName = table.Columns["LName"].ColumnName;
            dataGridView1.Columns["Age"].DataPropertyName = table.Columns["Age"].ColumnName;
            dataGridView1.DataSource = table;

            //IF THE ORDER DOSEN'T MATTER
            //DataTable table = new DataTable();
            //string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", "C:\Users\Excel\Desktop\Coding\DOT.NET\Samples C#\Export DataGridView to SQL Server Table\Import_List.xls");
            //using (OleDbConnection dbConnection = new OleDbConnection(strConn))
            //{
            //    using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", dbConnection)) //rename sheet if required!
            //        dbAdapter.Fill(table);
            //    dataGridView1.DataSource = table;
            //    int rows = table.Rows.Count;
            //}

        }

Excel для SQL Server:

        private void button3_Click(object sender, EventArgs e)
        {
            System.Data.OleDb.OleDbConnection ExcelConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Excel\Desktop\Coding\DOT.NET\Samples C#\Export DataGridView to SQL Server Table\Import_List.xls;Extended Properties=Excel 8.0;");

            ExcelConnection.Open();

            string expr = "SELECT * FROM [Sheet1$]";
            OleDbCommand objCmdSelect = new OleDbCommand(expr, ExcelConnection);
            OleDbDataReader objDR = null;
            SqlConnection SQLconn = new SqlConnection();
            string ConnString = "Data Source=Excel-PC;Initial Catalog=Northwind.MDF;Trusted_Connection=True;";
            SQLconn.ConnectionString = ConnString;
            SQLconn.Open();

            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLconn))
            {

                bulkCopy.DestinationTableName = "tblTest";

                try
                {
                    objDR = objCmdSelect.ExecuteReader();
                    bulkCopy.WriteToServer(objDR);
                    ExcelConnection.Close();

                    //objDR.Close()
                    SQLconn.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

        }

снова...Excel в SQL Сервер:

private void button4_Click(object sender, EventArgs e)
{
    BindGrid();
}

protected void BindGrid()
{
    string path = "C:\Users\Excel\Desktop\Coding\DOT.NET\Samples C#\Export DataGridView to SQL Server Table\Import_List.xls";
    string jet = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0", path);
    OleDbConnection conn = new OleDbConnection(jet);
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn);
    DataTable dt = new DataTable();
    da.Fill(dt);

    dataGridView1.DataSource = dt;
    BulkUpload();
}

наконец-то...DGV для SQL Server:

private void button8_Click(object sender, EventArgs e)
{

    //SqlConnection connection = new SqlConnection("Data Source=Excel-PC;Initial Catalog=Northwind.MDF;Trusted_Connection=True;");
    DataTable dt = (DataTable)dataGridView1.DataSource;
    string connection = "Data Source=Excel-PC;Initial Catalog=Northwind.MDF;Trusted_Connection=True;";
    using (var conn = new SqlConnection(connection))
    {
        conn.Open();
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
        {
            bulkCopy.ColumnMappings.Add(0, "Fname");
            bulkCopy.ColumnMappings.Add(1, "Lname");
            bulkCopy.ColumnMappings.Add(2, "Age");

            bulkCopy.BatchSize = 10000;
            bulkCopy.DestinationTableName = "Import_List";
            bulkCopy.WriteToServer(dt.CreateDataReader());
        }
    }

}

Не забудьте установить свои ссылки в верхней части!!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using Excel = Microsoft.Office.Interop.Excel;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Configuration;
using System.Data.SqlClient;