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

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

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

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

SQL

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

Q&A

解決済

1回答

18298閲覧

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

TrainRain

総合スコア20

C#

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

SQL

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

0グッド

0クリップ

投稿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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/11/22 07:49

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

退会済みユーザー

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ができました。
guest

回答1

0

ベストアンサー

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

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
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

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 ライブラリをよくよんでください。
退会済みユーザー

退会済みユーザー

2018/11/26 06:26

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問