2017-03-25 19 views
4

Visual Studio 2017 ExpressのC#プログラムからSql Server Expressで作成した1つのテーブルを持つ小さなローカルデータベースに接続しようとすると、私は私のソリューション(これはC#にあります)でEntity Framework内のデータソースとして接続したいと思います。私は数日間MSDNとこのサイトを検索しましたが、これを解決する方法は見つかりませんでした。SQL Server ExpressデータベースをVS 2017に接続する方法

問題は、エンティティデータモデルウィザード(既存のデータベース)を通過して新しい接続を確立するときに、「Microsoft SQL Serverデータベースファイル(SqlClient)」を選択し、データベース接続がエラーを生成します。

Unable to open the physical file "C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\MyDatabase.mdf". Operating system error 5: "5(Access is denied.)". An attempt to attach an auto-named database for file C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\DATA\MyDatabase.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

私は(これも私が私が権限を持っていなかったエラーメッセージを促すことなく、データベースを参照できないだろう前に問題を過ぎました管理者としてのVisual Studioを実行していますよデータベースファイルを開く)。

管理者として実行しているかどうかに関係なく、Visual Studio内のSQL Serverオブジェクトエクスプローラでデータベース、テーブル、およびそのデータを表示できます。それが重要であるかどうかは分かりません。 私はこのことを初めて知りました。

答えて

2

SQL Server用の.NET Frameworkデータプロバイダを使用して、ローカルのMicrosoft SQL Serverインスタンス(Microsoft SQL Expressを含む)にファイルを送信できます。

しかし、理由はわかりませんが、これは正しい選択ではありませんでした。

代わりに「その他」を選択しようとしました。

次に、次のページでサーバー名として「。\ SQLExpress」と入力します(connectionstrings.com/sql-server/に記載されています)。おかげで@ ryguy72!)

次に、「データベースに接続する」の下に、すでにSSMSを使用して作成したものを含め、データベースのローカルリストがポップアップ表示されました。

テスト接続が最後に実行されました!

1

あなたはここを見ていますか?

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

最も簡単な可能なシナリオ(保障なし)でそれを試してみてください。

サーバー= myServerAddress;データベース= myDataBase; Trusted_Connection = True;

私のマシン上のSQL Server DBにヒットするC#スクリプトです。

DGVにエクセル:SQL Serverへの

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

     } 

エクセル:再び

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

     } 

...エクセル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(); 
} 

... DGV SQLには、サーバー:

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

} 

上部にあなたの参照を設定することを忘れないでください!その記述は、「データベースをアタッチするために、この選択を使用しているため のVisual Studioの「新しいデータソースの追加」ウィザードでは、私が選ん保管オプションは、「Microsoft SQL Serverデータベースファイル」であった:私の問題を考え出し

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; 
+0

非常に徹底的な答えをありがとう!私はさまざまなオプションがあるデータベースプログラムから別のデータベースプログラムにデータをコピーすることに基づいていると思う。私の場合、使用したいテーブルはすでに正しく設定されており、Sql Serverに正しく存在しています...問題はVisual StudioプログラムをVSウィザードを使用してデータソースとして接続するだけです。私はあまりにもconnectionstringリンクを見て、私はそれを見ています。これは、ウィザードの "コードファースト"オプションを使用してエラーメッセージを克服する必要があることを意味しますか?新しいデータソースを追加しようとしてもエラーが表示されます。 –

関連する問題