<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://mochiuwiki.e2.valueserver.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2400%3A416A%3A1B53%3AFB00%3A2C3B%3AC1C%3A1C1%3AD729</id>
	<title>MochiuWiki : SUSE, EC, PCB - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="http://mochiuwiki.e2.valueserver.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2400%3A416A%3A1B53%3AFB00%3A2C3B%3AC1C%3A1C1%3AD729"/>
	<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/2400:416A:1B53:FB00:2C3B:C1C:1C1:D729"/>
	<updated>2026-09-01T22:20:36Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://mochiuwiki.e2.valueserver.jp/index.php?title=C_Sharp%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9_-_%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E6%8E%A5%E7%B6%9A&amp;diff=96</id>
		<title>C Sharpとデータベース - データベースの接続</title>
		<link rel="alternate" type="text/html" href="http://mochiuwiki.e2.valueserver.jp/index.php?title=C_Sharp%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9_-_%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E6%8E%A5%E7%B6%9A&amp;diff=96"/>
		<updated>2019-06-29T07:44:45Z</updated>

		<summary type="html">&lt;p&gt;2400:416A:1B53:FB00:2C3B:C1C:1C1:D729: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 概要 ==&lt;br /&gt;
ADO.NETを用いてC\#でSQL Serverに接続するには、下記のような流れで処理を行う。&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# 接続文字列の準備(コード埋め込みまたはapp.configから取得)&lt;br /&gt;
# データベース接続準備(usingとtry-catchを用いた実装例)&lt;br /&gt;
# SQLの実行&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initial CatalogをTrueにすると、SQL Server Expressだとmdfファイルへの接続のみ許可されて、接続ユーザ毎に新しいプロセスが立ち上がる。&amp;lt;br&amp;gt;&lt;br /&gt;
開発時にはTrueで問題ないが、本番環境ではセキュリティ的な問題でFalseにすること。&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 接続文字列の準備 ==&lt;br /&gt;
* ソースコード上に埋め込む&lt;br /&gt;
:プロパティ値を設定するので、ソースコード上で接続先が変更できる。&lt;br /&gt;
&lt;br /&gt;
 using System.Data.SqlClient;&lt;br /&gt;
 &lt;br /&gt;
 public string GetConnectionString2()&lt;br /&gt;
 {&lt;br /&gt;
    var builder = new SqlConnectionStringBuilder()&lt;br /&gt;
    {&lt;br /&gt;
        DataSource = &amp;quot;(サーバー名/IPアドレス)&amp;quot;,&lt;br /&gt;
        Initial Catalog=(データベース名);&lt;br /&gt;
        Integrated Security = false, // SQL Server認証なら不要&lt;br /&gt;
        UserID = &amp;quot;(ユーザー名)&amp;quot;,&lt;br /&gt;
        Password = &amp;quot;(パスワード)&amp;quot;&lt;br /&gt;
    };&lt;br /&gt;
 &lt;br /&gt;
    return builder.ToString();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* app.configまたはweb.configから取得&lt;br /&gt;
:テスト環境、本番環境でソースコードを変更せずに接続先を変更することができる。&lt;br /&gt;
:ただし、ユーザ名とパスワードを平文で記載する場合は、リリースフローや運用でパスワード管理方法を考える必要がある。&lt;br /&gt;
&lt;br /&gt;
:app.configまたはweb.configのadd[@name]で指定された名前は、接続文字列を取得する際のキーになる。&lt;br /&gt;
:ソースコード上でこのキーを指定することで接続文字列を取得する。&lt;br /&gt;
:ここでは&#039;&#039;&#039;&amp;quot;sqlsvr&amp;quot;&#039;&#039;&#039;を利用しているが、特定できれば任意の文字列で問題ない。&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;---ソースコード---&#039;&#039;&#039;&lt;br /&gt;
 using System.Configuration;&lt;br /&gt;
 &lt;br /&gt;
 public string GetConnectionString()&lt;br /&gt;
 {&lt;br /&gt;
     return ConfigurationManager.ConnectionStrings[&amp;quot;sqlsvr&amp;quot;].ConnectionString;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;&#039;---app.configまたはweb.config---&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;configuration&amp;gt;&lt;br /&gt;
   &amp;lt;connectionStrings&amp;gt;&lt;br /&gt;
     &amp;lt;add name=&amp;quot;sqlsvr&amp;quot;  // 接続文字列&lt;br /&gt;
         connectionString=&amp;quot;Data Source=(サーバー名/IPアドレス);&lt;br /&gt;
         Initial Catalog=(データベース名); // SQL Server認証なら不要&lt;br /&gt;
         Persist Security Info=True;&lt;br /&gt;
         User ID=(ユーザー名);&lt;br /&gt;
         Password=(パスワード)&amp;quot;&lt;br /&gt;
         providerName=&amp;quot;System.Data.SqlClient&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/connectionStrings&amp;gt;&lt;br /&gt;
 &amp;lt;/configuration&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== データベース接続 ==&lt;br /&gt;
SQL Serverに接続する実装方法はいくつ存在するが、ここでは以下のパターンを記載する。&amp;lt;br&amp;gt;&lt;br /&gt;
# usingとtry-catchを用いた実装例&lt;br /&gt;
# トランザクションを用いた実装例&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* usingとtry-catchを用いた実装例&lt;br /&gt;
:一部のオブジェクトは破棄を保証する必要があるので、ソースコードに記載するのではなく、usingで担保するような実装を行う。&lt;br /&gt;
:スコープから外れた時点で破棄が必要なオブジェクトは自動的に破棄されるが、 usingを用いるとオブジェクトの破棄が明示的になる。&lt;br /&gt;
&lt;br /&gt;
 using System;&lt;br /&gt;
 using System.Configuration;&lt;br /&gt;
 using System.Data.SqlClient;&lt;br /&gt;
 &lt;br /&gt;
 public void Connect3()&lt;br /&gt;
 {&lt;br /&gt;
    // 接続文字列の取得&lt;br /&gt;
    var connectionString = ConfigurationManager.ConnectionStrings[&amp;quot;sqlsvr&amp;quot;].ConnectionString;&lt;br /&gt;
 &lt;br /&gt;
    using (var connection = new SqlConnection(connectionString))&lt;br /&gt;
    using (var command = connection.CreateCommand())&lt;br /&gt;
    {&lt;br /&gt;
        try&lt;br /&gt;
        {&lt;br /&gt;
            // データベースの接続開始&lt;br /&gt;
            connection.Open();&lt;br /&gt;
 &lt;br /&gt;
            // SQLの実行&lt;br /&gt;
            command.CommandText = @&amp;quot;SELECT count(*) FROM T_USER&amp;quot;;&lt;br /&gt;
            command.ExecuteNonQuery();&lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception exception)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(exception.Message);&lt;br /&gt;
            throw;&lt;br /&gt;
        }&lt;br /&gt;
        finally&lt;br /&gt;
        {&lt;br /&gt;
            // データベースの接続終了&lt;br /&gt;
            connection.Close();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* トランザクションを用いた実装例&lt;br /&gt;
:上記のusingとtry-catchに加えて、トランザクション処理を行う場合の実装例である。&lt;br /&gt;
 using System;&lt;br /&gt;
 using System.Configuration;&lt;br /&gt;
 using System.Data.SqlClient;&lt;br /&gt;
 &lt;br /&gt;
 public void Create(string id, string password)&lt;br /&gt;
 {&lt;br /&gt;
    // 接続文字列の取得&lt;br /&gt;
    var connectionString = ConfigurationManager.ConnectionStrings[&amp;quot;sqlsvr&amp;quot;].ConnectionString;&lt;br /&gt;
 &lt;br /&gt;
    using (var connection = new SqlConnection(connectionString))&lt;br /&gt;
    {&lt;br /&gt;
        try&lt;br /&gt;
        {&lt;br /&gt;
            // データベースの接続開始&lt;br /&gt;
            connection.Open();&lt;br /&gt;
 &lt;br /&gt;
            using (var transaction = connection.BeginTransaction())&lt;br /&gt;
            using (var command = new SqlCommand() { Connection = connection, Transaction = transaction })&lt;br /&gt;
            {&lt;br /&gt;
                try&lt;br /&gt;
                {&lt;br /&gt;
                    // 実行するSQLの準備&lt;br /&gt;
                    command.CommandText = @&amp;quot;INSERT INTO T_USER (ID, PASSWORD) VALUES (@ID, @PASSWORD)&amp;quot;;&lt;br /&gt;
                    command.Parameters.Add(new SqlParameter(&amp;quot;@ID&amp;quot;, id));&lt;br /&gt;
                    command.Parameters.Add(new SqlParameter(&amp;quot;@PASSWORD&amp;quot;, password));&lt;br /&gt;
 &lt;br /&gt;
                    // SQLの実行&lt;br /&gt;
                    command.ExecuteNonQuery();&lt;br /&gt;
                }&lt;br /&gt;
                catch&lt;br /&gt;
                {&lt;br /&gt;
                    // ロールバック&lt;br /&gt;
                    transaction.Rollback();&lt;br /&gt;
                    throw;&lt;br /&gt;
                }&lt;br /&gt;
                finally&lt;br /&gt;
                {&lt;br /&gt;
                    // コミット&lt;br /&gt;
                    transaction.Commit();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        catch (Exception exception)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(exception.Message);&lt;br /&gt;
            throw;&lt;br /&gt;
        }&lt;br /&gt;
        finally&lt;br /&gt;
        {&lt;br /&gt;
            // データベースの接続終了&lt;br /&gt;
            connection.Close();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[カテゴリ:C_Sharp]]&lt;/div&gt;</summary>
		<author><name>2400:416A:1B53:FB00:2C3B:C1C:1C1:D729</name></author>
	</entry>
</feed>