it-swarm.com.de

So verbinden Sie die SQL Server Express-Datenbank mit VS 2017

Ich habe immer wieder Probleme mit dem Versuch, eine Verbindung von meinem c # -Programm in Visual Studio 2017 Express zu einer kleinen lokalen Datenbank mit einer Tabelle herzustellen, die ich in SQL Server Express erstellt habe. Ich möchte es als Datenquelle innerhalb von Entity Framework in meiner Lösung (die in c # ist) verbinden. Ich habe seit Tagen nach MSDN und dieser Site gesucht, aber keinen Weg gefunden, dies zu lösen.

Das Problem besteht nun darin, dass ich, wenn ich das Entitätsdatenmodell Wizard (vorhandene Datenbank) durchsuche und eine neue Verbindung herstelle, "Microsoft SQL Server-Datenbankdatei (SqlClient)" auswähle und zu meiner Datenbank navigiere - Die Testverbindung generiert den Fehler:

Die physische Datei "C:\Programme\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\MyDatabase.mdf" kann nicht geöffnet werden. Betriebssystemfehler 5: "5 (Zugriff verweigert.)". Ein Versuch, eine Datenbank mit automatischem Namen für die Datei C:\Programme\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\MyDatabase.mdf anzuhängen, ist fehlgeschlagen. Es ist eine Datenbank mit demselben Namen vorhanden, oder die angegebene Datei kann nicht geöffnet werden, oder sie befindet sich auf einer UNC-Freigabe.

Ich führe Visual Studio als Administrator aus (dies ist über ein vorheriges Problem hinausgegangen, bei dem ich nicht einmal zur Datenbank navigieren konnte, ohne eine Fehlermeldung zu erhalten, dass ich nicht berechtigt war, die Datenbankdatei zu öffnen).

Ich kann meine Datenbank, ihre Tabelle und ihre Daten im SQL Server-Objekt-Explorer in Visual Studio anzeigen - unabhängig davon, ob ich sie als Administrator ausführe oder nicht. Ich bin mir nicht sicher, ob das von Bedeutung ist. Ich bin neu in all dem, also tut mir leid, wenn mir etwas Offensichtliches fehlt.

7
Gus Yorke

Das Problem wurde behoben: Im Visual Studio-Assistenten "Neue Datenquelle hinzufügen" wurde weiterhin die Option "Microsoft SQL Server-Datenbankdatei" ausgewählt, da die Beschreibung "Mit dieser Auswahl eine Datenbankdatei an eine lokale Microsoft SQL Server-Instanz anhängen" lautet (einschließlich Microsoft SQL Express) mit dem .NET Framework-Datenanbieter für SQL Server. "

Ich bin mir jedoch nicht sicher, warum dies nicht die richtige Auswahl war.

Ich habe stattdessen versucht, "andere" auszuwählen.

Dann auf der nächsten Seite ".\SQLExpress" als Servernamen eingeben (auf connectionstrings.com/sql-server/ erwähnt ... Danke für den Hinweis @ ryguy72!)

Dann wurde unter "Mit einer Datenbank verbinden" meine lokale Liste der Datenbanken angezeigt, einschließlich derjenigen, die ich bereits mit SSMS erstellt hatte.

Test Connection hat dann endlich geklappt!

7
Gus Yorke

Hast du hier geschaut?

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

Versuchen Sie es mit dem einfachsten Szenario (keine Sicherheit).

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

Hier ist ein C # -Skript, das eine SQL Server-Datenbank auf meinem Computer abruft.

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

        }

Nochmals ... Excel zu 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();
}

Endlich ... DGV zu 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());
        }
    }

}

Vergessen Sie nicht, Ihre Referenzen an der Spitze zu setzen!

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