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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

解決済

SQLのconnectionStringの書き方を教えてください。

TrainRain
TrainRain

総合スコア20

C#

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1回答

0グッド

0クリップ

13316閲覧

投稿2018/11/22 07:36

こんにちは。

前提・実現したいこと

Windows10を使ってVisual Studo 2017でコンソールアプリケーションのプロジェクトを作っています。
Code FirstでローカルのSQLに接続しようとしています。
connectionStringを設定しないときは接続でき、tableを作れました。

コンソールアプリケーションのプロジェクトを作り、EntityFrameWorkをNugetしました。
データADO.NET Entity Data Model(BooksDbContext)を作り設定しました。
connectionStringの書き方を教えてください。

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

connectionStringの書き方がわからない。

該当のソースコード

コードはこれだけです。

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 = "幻魔大戦1幻魔宇宙", 14 PublishedYear = 1979 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")//<-ここのnameはどこと関係する? 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--> 20</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認証でアクセスできます。

質問のため便宜的に項目に分けます

name="BooksDbContext"//<-BooksDbContextのbase("name=")の項目と一致? //public BooksDbContext() // : base("name=BooksDbContext") //{ //} connectionString=" data source=(localhost)\SQLEXPRESS; SSMSでは「localhost\SQLEXPRESS」にWindows認証でアクセスできる。()と\はどうする? initial catalog=ConsoleApp1.Models.BooksDbContext;//BooksDbContextのClass名? 任意の名前にできる? integrated security=True; MultipleActiveResultSets=True; App=EntityFramework" providerName="System.Data.SqlClient" //<-変更できる?

求める回答

Q1)なぜdata source=(localhost)\SQLEXPRESS;でアクセスできない?
Q2)data source=なにならアクセスできる?
Q3)コードの : base("name=BooksDbContext")はどこと関係する?
Q4)App.configの、name="BooksDbContext"か?
Q5)initial catalog=ConsoleApp1.Models.BooksDbContext;はBooksDbContextのClass名?
Q6)initial catalog=ConsoleApp1.Models.BooksDbContext;は任意の名前にできる?

補足情報(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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2018/11/22 07:39

こちらの質問が他のユーザーから「過去の低評価」という指摘を受けました。

SurferOnWww

2018/11/22 07:49

> データADO.NET Entity Data Model(BooksDbContext)を作り設定しました。 ← どういうことですか? 前のスレッドでそれは違うと指摘しましたが、何をしたんですか?
SurferOnWww

2018/11/22 07:54

前のスレッドで、SQL Server Express に DB とテーブルが生成されたはずですが、そのスクリーンショット(DB とテーブル名が分かるもの)を撮って貼れませんか?
TrainRain

2018/11/22 09:01

BooksDbContext.csを作りました。コードは上のとおりです。このコードは不要でしょうか? 不要かどうかを読み取れませんでした。現状で、あって動きます。
TrainRain

2018/11/22 09:07

キャプチャーは貼れませんが、localhost\SQLEXPRESS(SQL Server 14.0.1000 - PCNAME\usernameです。
TrainRain

2018/11/22 09:07

Databeses以下に、ConsoleApp1.Models.BooksDbContextができました。
TrainRain

2018/11/22 09:08

Tablesの下に、dbo.Booksができました。

回答1

2

ベストアンサー

話が通じるかどうか分かりませんが・・・

Databeses以下に、ConsoleApp1.Models.BooksDbContextができました。

であれば、接続文字列は、

Data Source=(local)\SQLEXPRESS;Initial Catalog=ConsoleApp1.Models.BooksDbContext;Integrated Security=SSPI

で OK です。

【追伸】

話が通じなかったようですので、以下に質問者さんの Q1 ~ Q6 に対し説明しておきます。不明点があれば、何が不明なのか聞いてください。

回答・レスを貰ったら必ずタイムリーにフィードバックするようにしましょう。例え「分からない」とか「役に立たない」というフィードバックでも、無言よりは∞倍マシです。

Q1)なぜdata source=(localhost)\SQLEXPRESS;でアクセスできない?

(localhost)\SQLEXPRESS ⇒ (local)\SQLEXPRESS とすべきです。 上の質問に対する 2018/11/22 16:56 の私のコメントで紹介した MSDN ライブラリをよくよんでください。

Q2)data source=なにならアクセスできる?

上に書いた通り。

Q3)コードの : base("name=BooksDbContext")はどこと関係する?

app.config に設定する接続文字列の名前、即ち以下の name="xxxxx" です。ちなみに、上の回答の接続文字列は下の yyyyy の部分に設定します。

<connectionStrings> <add name="xxxxx" connectionString="yyyyy" providerName="System.Data.SqlClient" /> </connectionStrings>

Q4)App.configの、name="BooksDbContext"か?

上に書いた通り。

Q5)initial catalog=ConsoleApp1.Models.BooksDbContext;はBooksDbContextのClass名?

データベース名です。上の質問に対する 2018/11/22 16:56 コメントで紹介した MSDN ライブラリをよく読んでください。

Q6)initial catalog=ConsoleApp1.Models.BooksDbContext;は任意の名前にできる?

できません。

投稿2018/11/22 09:48

編集2018/11/23 03:01
SurferOnWww

総合スコア17342

bochan2, Zuishin👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

TrainRain

2018/11/26 01:29

コメントありがとうございます。早速検証します。
TrainRain

2018/11/26 05:45

検証しました。 localhostをlocalにしたところ、アクセスできました。 ありがとうございました。
TrainRain

2018/11/26 05:59

MSDNも読みましたが、やっぱり(localhost)でだめで(local)でOKの理由がわかりませんでした。 (localhost)にするにはどこを変更すればよいかを、簡潔に補足していただけると嬉しいです。 Q1)なぜdata source=(localhost)\SQLEXPRESS;でアクセスできない? (localhost)\SQLEXPRESS ⇒ (local)\SQLEXPRESS とすべきです。 上の質問に対する 2018/11/22 16:56 の私のコメントで紹介した MSDN ライブラリをよくよんでください。
SurferOnWww

2018/11/26 06:26

紹介した MSDN ライブラリに書いてありますが、localhost は強制的に tcp 接続を行うときに使うそうです。何故かは議論の余地はなくて、SQL Server の接続文字列はそういう取り決めになっているということで納得する他ないと思いますが。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。