質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

2回答

3022閲覧

System.InvalidOperationException: 'インスタンス エラーです。'のSQLServerに接続したい

TrainRain

総合スコア20

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2018/11/21 09:04

編集2018/11/22 07:18

こんにちは。

前提・実現したいこと

Windows10を使ってVisual Studo 2017でコンソールアプリケーションのプロジェクトを作っています。
Code FirstでローカルのSQLに接続しようとしていますが失敗しています。

コンソールアプリケーションのプロジェクトを作り、EntityFrameWorkをNugetしました。
データADO.NET Entity Data Model(ApplicationDbContext)を作り設定しました。
SQLにアクセスできずにいます。

発生している問題・エラーメッセージ

System.InvalidOperationException: 'インスタンス エラーです。'

該当のソースコード

コードはこれだけです。

C#

1using ConsoleApp1.Models; 2 3namespace ConsoleApp1 4{ 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 using (var db = new BooksDbContext()) 10 { 11 var book1 = new Book 12 { 13 Title = "幻魔大戦", 14 PublishedYear = 1981 15 }; 16 db.Books.Add(book1); 17 db.SaveChanges(); 18 } 19 } 20 } 21}

C#

1namespace ConsoleApp1.Models 2{ 3 public class Book 4 { 5 public int Id { get; set; } 6 public string Title { get; set; } 7 public int PublishedYear { get; set; } 8 } 9} 10

C#

1namespace ConsoleApp1.Models 2{ 3 using System.Data.Entity; 4 5 public class BooksDbContext : DbContext 6 { 7 public BooksDbContext() 8 : base("name=BooksDbContext") 9 { 10 } 11 12 public DbSet<Book> Books { get; set; } 13 } 14}

XML

1<?xml version="1.0" encoding="utf-8"?> 2<configuration> 3 <configSections> 4 <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 5 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a7c771981e077" requirePermission="false" /> 6 </configSections> 7 <startup> 8 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" /> 9 </startup> 10 <entityFramework> 11 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 12 <providers> 13 <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 14 </providers> 15 </entityFramework> 16 <connectionStrings> 17 <add name="BooksDbContext" connectionString="data source=(localhost)\SQLEXPRESS;initial catalog=ConsoleApp1.Models.BooksDbContext;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 18 </connectionStrings> 19</configuration>

試したこと

SSMSでは接続できています。
data source=(localhost)\SQLEXPRESS;

data source=(localhost)\SQLEXPRESS;//db.Books.Add(book1);で無反応
data source=localhost\SQLEXPRESS;//インスタンスエラーです
data source=(localhost)\SQLEXPRESS;//db.Books.Add(book1);で無反応
data source=localhost\SQLEXPRESS;//db.Books.Add(book1);で無反応
data source=localhost;//db.Books.Add(book1);で無反応
data source=\SQLEXPRESS;//db.Books.Add(book1);で無反応
などにしました。

現在、SSMSで「localhost\SQLEXPRESS」にWindows認証でアクセスできます。
テーブルは作っていません。

補足情報(FW/ツールのバージョンなど)

Intel Pentium(R) CPU 4415 Y 1.60GHz RAM 8GB Windows10Pro 64bit 1803 17134.345 Microsoft Visual Studio Community 2017 Version 15.8.5 VisualStudio.15.Release/15.8.5+28010.2036 Microsoft .NET Framework Version 4.7.03056 インストールされているバージョン:Community

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/21 13:01

DB First なのか Code First なのか、どっち?
guest

回答2

0

接続文字列(connectionString)に一箇所間違いを見つけました。

initial catalog=ConsoleApp1.Models.BooksDbContext;
これは多分↓
initial catalog=db.Books;

接続文字列の書式はしっかり覚えとかないと後で苦労します。

投稿2018/11/22 02:19

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TrainRain

2018/11/22 07:19 編集

コメントありがとうございます。 残念ながらinitial catalog=db.Booksにしても症状は変わりませんでした。 (当初catalogと書いていましたが、initial catalogでしたので修正しました)。
hihijiji

2018/11/22 06:47

"catalog"ではなく"initial catalog"です。 "data source"も"source"ではありません。
TrainRain

2018/11/22 07:20 編集

コメントありがとうございます。 下記の通りにしましたが、症状は変わりませんでした。 catalog=db.Booksと書きましたが、最初からinitial catalog=db.Booksでした。data sourceも表記修正しました。 たぶんdata sourceやinitial catalogという項目名は問題ではないであろうと思います。 <connectionStrings> <add name="BooksDbContext" connectionString="data source=localhost\SQLEXPRESS;initial catalog=db.Books;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings>
guest

0

ベストアンサー

Code Firstです。

質問を読みますと、DB First と Code First がゴッチャになっているような気がします。

コンソールアプリでの Code First の作業としては、

コンソールアプリケーションのプロジェクトを作り、EntityFrameWorkをNugetしました。

・・・は必要ですが、

データADO.NET Entity Data Modelを作り設定しました。

・・・は、基本的に DB First で既存の DB から Entity Data Model を作るためのものだと思うのですが。

それはとりあえず置いといて・・・

一度、以下のチュートリアルに従ってコンソールアプリを作ってみてください。Code First での最低限必要な手順しか書いてないので、何が基本的に必要なのか非常に参考になると思います。

新しいデータベースの code First
https://docs.microsoft.com/ja-jp/ef/ef6/modeling/code-first/workflows/new-database

質問者さんの開発マシンには SQL Server Express がインストールされているそうですので、上記のチュートリアルの手順でアプリを作って実行すれば、上の記事の「データがあるでしょうか」の書いてあるように DB とテーブルが自動生成され SQL Server Express のインスタンスにアタッチされるはずです。

SSMS を使えるそうですので、記事のようにサーバーエクスプローラーを使うより、SSMS を使った方が簡単で見やすいと思います。

上記の手順で作ったアプリの App.config に接続文字列がないと思います。それなのになぜ接続できるのか不思議かもしれませんが、それについては以下の MSDN ライブラリを見てください。

DbContext Class
https://msdn.microsoft.com/ja-jp/library/system.data.entity.dbcontext(v=vs.113).aspx

If the parameterless DbContext constructor is called from a derived context, then the name of the derived context is used to find a connection string in the app.config or web.config file.

If no connection string is found, then the name is passed to the DefaultConnectionFactory registered on the Database class.

The connection factory then uses the context name as the database name in a default connection string.
(This default connection string points to .\SQLEXPRESS on the local machine unless a different DefaultConnectionFactory is registered.)

・・・ということで App.config に接続文字列がなくても接続できるということです。

投稿2018/11/22 02:12

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問