web-dev-qa-db-fra.com

Comment connecter la base de données SQL Server Express à VS 2017

Je continue de rencontrer des problèmes en essayant simplement d'établir une connexion entre mon programme c # dans Visual Studio 2017 Express et une petite base de données locale avec une table que j'ai créée dans Sql Server Express. Je voudrais le connecter en tant que source de données dans Entity Framework dans ma solution (qui est en c #). J'ai recherché MSDN et ce site pendant des jours, mais je n'ai pas trouvé de moyen de résoudre ce problème.

Le problème est maintenant que lorsque je passe par le modèle de données d'entité Wizard (base de données existante) et que je vais établir une nouvelle connexion, sélectionnez "Fichier de base de données Microsoft SQL Server (SqlClient)" et accédez à mon base de données - la connexion de test génère l'erreur:

Impossible d'ouvrir le fichier physique "C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\MyDatabase.mdf". Erreur 5 du système d'exploitation: "5 (l'accès est refusé.)". Une tentative pour joindre une base de données nommée automatiquement pour le fichier C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\MyDatabase.mdf a échoué. Une base de données portant le même nom existe, ou le fichier spécifié ne peut pas être ouvert, ou il se trouve sur le partage UNC.

J'exécute Visual Studio en tant qu'administrateur (cela a dépassé un problème précédent qui ne me permettait même pas de parcourir la base de données sans inviter un message d'erreur indiquant que je n'avais pas l'autorisation d'ouvrir le fichier de base de données).

Je peux afficher ma base de données, sa table et ses données dans l'Explorateur d'objets SQL Server dans Visual Studio, que je l'exécute en tant qu'administrateur ou non. Je ne sais pas si c'est important. Je suis nouveau dans tout cela, donc désolé si je manque quelque chose d'évident.

7
Gus Yorke

J'ai résolu mon problème: dans l'assistant "Ajouter une nouvelle source de données" de Visual Studio, l'option que je continuais à choisir était "Fichier de base de données Microsoft SQL Server", car sa description est "Utilisez cette sélection pour attacher un fichier de base de données à une instance locale de Microsoft SQL Server (y compris Microsoft SQL Express) à l'aide du fournisseur de données .NET Framework pour SQL Server. "

Cependant, et je ne sais pas pourquoi, ce n'était pas la bonne sélection.

J'ai plutôt essayé de sélectionner "autre".

Ensuite, sur la page suivante, saisissez ".\SQLExpress" comme nom de serveur (mentionné sur connectionstrings.com/sql-server/ ... Merci pour le lead @ ryguy72!)

Ensuite, sous "Se connecter à une base de données", ma liste locale de bases de données est apparue, y compris celle que j'avais déjà créée à l'aide de SSMS.

Test Connection a finalement fonctionné alors!

7
Gus Yorke

Avez-vous regardé ici?

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

Essayez-le avec le scénario le plus simple possible (pas de sécurité).

Server = myServerAddress; Database = myDataBase; Trusted_Connection = True;

Voici un script C # qui frappe une base de données SQL Server sur ma machine.

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

        }

Encore une fois ... Excel vers SQL Server:

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

Enfin ... DGV vers 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());
        }
    }

}

N'oubliez pas de mettre vos références au top !!

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;
1
ryguy72