Symfoware

Symfowareについての考察blog

Windows Server 2016 ASP.NET aspxページでSQL Server 2016に接続する

Windows Server 2016にIIS 10.0をインストール。
ASP.NETが動作する環境を構築しました。

Windows Server 2016 にIIS 10.0をインストールし、ASP.NETを有効化


せっかくなので、aspxでSQL Server 2016に接続して、データを取得するプログラムを作成してみます。


使用する環境



接続するSQL Server 2016はこちらで使用したものです。
Windows Server 2016のポートを開放する(SQL Server 2016 外部接続許可)
Debian 8(jessie) + C#(Mono)でSQL Server 2016に接続する

aspxのソースは、以前MySQLに接続した時のものを参考にしました。
ASP.NET aspxページでMySQLに接続する




サンプルプログラム



「C:\inetpub\wwwroot」に「sample.aspx」というファイルを作成します。
ファイルの内容は以下のとおり。


  1. <%@ Page Language="C#" %>
  2. <%@ Import Namespace="System.Data" %>
  3. <%@ Import Namespace="System.Data.SqlClient" %>
  4. <script runat="server">
  5. protected void Page_Load(Object source, EventArgs e) {
  6.     if (IsPostBack) {
  7.         return;
  8.     }
  9.     
  10.     // 接続文字列を作成
  11.     string connectString = "Data Source=192.168.1.104;";
  12.     connectString += "Initial Catalog=sample;";
  13.     connectString += "User ID=sa;";
  14.     connectString += "Password=P@ssw0rd;";
  15.     connectString += "Trusted_Connection=False;";
  16.     
  17.     
  18.     // 取得したデータ退避用
  19.     DataTable dt = new DataTable();
  20.     
  21.     using (SqlConnection con = new SqlConnection(connectString))
  22.     using (SqlDataAdapter adapter = new SqlDataAdapter()) {
  23.         con.Open();
  24.         
  25.         // クエリを実行して、結果をDataTableに退避
  26.         string query = "SELECT * FROM t1";
  27.         adapter.SelectCommand = new SqlCommand(query, con);
  28.         adapter.Fill(dt);
  29.         
  30.     }
  31.     
  32.     // 画面上のDataGridとバインド
  33.     datagrid.DataSource = new DataView(dt);
  34.     DataBind();
  35. }
  36. </script>
  37. <html>
  38. <body>
  39. <asp:DataGrid id="datagrid" runat="server" />
  40. </body>
  41. </html>




ブラウザでhttp://[サーバーIP]/sample.aspxを表示してみると、
テーブルに登録している内容が表示されました。

715_01.png


お手軽でいいですね。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2016/10/06(木) 01:06:58|
  2. SQL Server
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Debian 8(jessie) + C#(Mono)でSQL Server 2016に接続する

Debian 6 + Monoでも同様のことをやったことがあるのですが、改めて試してみます。
Debian(Squeeze) + MonoでSQL Serverに接続する


Monoのインストールはこちら。
Debian 8(jessie)にapt-getでmonoをインストール

SQL Server 2016は外部から接続可能なように構成しておきます。
Windows Server 2016のポートを開放する(SQL Server 2016 外部接続許可)




DebianとMonoのバージョン



実行時のDebianやMonoのバージョンです。


# cat /etc/debian_version
8.6

# uname -a
Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux

# mono -V
Mono JIT compiler version 4.6.1 (Stable 4.6.1.3/abb06f1 Wed Sep 28 13:54:26 UTC 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:         __thread
    SIGSEGV:     altstack
    Notifications: epoll
    Architecture: amd64
    Disabled:     none
    Misc:         softdebug
    LLVM:         supported, not enabled.
    GC:            sgen




Debian 8.6、Mono 4.6.1の環境です。





テストデータベース



IP : 192.168.1.104
User ID : sa
Password : P@ssw0rd

sampleというデータベースにt1というテーブルを作成しました。
idがint型、valueがvarchar型です。

713_01.png




データの登録



簡単なデータの登録プログラムはこんな感じになります。


  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. public class Sample {
  5.     
  6.     static public void Main () {
  7.         
  8.         // 接続文字列
  9.         string connectString = "Data Source=192.168.1.104;";
  10.         connectString += "Initial Catalog=sample;";
  11.         connectString += "User ID=sa;";
  12.         connectString += "Password=P@ssw0rd;";
  13.         connectString += "Trusted_Connection=False;";
  14.         
  15.         // データベースに接続
  16.         using (SqlConnection con = new SqlConnection(connectString)) {
  17.             
  18.             // 登録実行
  19.             string query = "INSERT INTO t1 (id, value) VALUES (1, 'C#から登録テスト')";
  20.             
  21.             con.Open();
  22.             SqlCommand cmd = new SqlCommand(query, con);
  23.             cmd.ExecuteNonQuery();
  24.             
  25.         }
  26.         
  27.     }
  28. }




コンパイル時、「-r:System.Data.dll」を付与してSystem.Data名前空間が使用できるようにします。


# mcs sample.cs -r:System.Data.dll




付けていないと、こんなエラーが発生します。


sample.cs(2,14): error CS0234: The type or namespace name `Data' does not exist in the namespace `System'.
Are you missing `System.Data' assembly reference?




プログラムを実行すると、ちゃんとデータが登録されていました。

713_02.png





SqlDataAdapterを使用したデータの検索



今度は登録したデータを検索してみます。


  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. public class Sample {
  5.     
  6.     static public void Main () {
  7.         
  8.         // 接続文字列
  9.         string connectString = "Data Source=192.168.1.104;";
  10.         connectString += "Initial Catalog=sample;";
  11.         connectString += "User ID=sa;";
  12.         connectString += "Password=P@ssw0rd;";
  13.         connectString += "Trusted_Connection=False;";
  14.         
  15.         // データベースに接続
  16.         using (SqlConnection con = new SqlConnection(connectString)) {
  17.             
  18.             using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM t1", con))
  19.             using (DataTable dt = new DataTable()) {
  20.                 
  21.                 // 検索結果をDataTableに退避
  22.                 da.Fill(dt);
  23.                 
  24.                 // 内容を表示
  25.                 foreach (DataRow dr in dt.Rows) {
  26.                     Console.WriteLine("id:{0}, value:{1}", dr["id"], dr["value"]);
  27.                 }
  28.                 
  29.             }
  30.             
  31.         }
  32.         
  33.     }
  34. }




実行結果


# ./sample.exe
id:1, value:C#から登録テスト




ちゃんとデータが取得できていますね。





SqlDataAdapterを使用したデータの登録



SqlDataAdapterを使用してデータの更新が行えるのは知っていたのですが、
試したことがなかったのでやってみます。

Mono特有なのかもしれませんが、こんなエラーが発生して苦しみました。


-- 更新用のクエリーが設定されていない
Unhandled Exception:
System.InvalidOperationException: Update requires a valid UpdateCommand when passed DataRow collection with modified rows.


-- 更新用のクエリーのコネクションが初期化されていない
Unhandled Exception:
System.InvalidOperationException: Update requires the command clone to have a connection object.
The Connection property of the command clone has not been initialized.


Unhandled Exception:
System.InvalidOperationException: Update requires the UpdateCommand to have a connection object.
The Connection property of the UpdateCommand has not been initialized.





最終的に、データの追加や更新を行うプログラムはこうなりました。


  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. public class Sample {
  5.     
  6.     static public void Main () {
  7.         
  8.         // 接続文字列
  9.         string connectString = "Data Source=192.168.1.104;";
  10.         connectString += "Initial Catalog=sample;";
  11.         connectString += "User ID=sa;";
  12.         connectString += "Password=P@ssw0rd;";
  13.         connectString += "Trusted_Connection=False;";
  14.         
  15.         // データベースに接続
  16.         using (SqlConnection con = new SqlConnection(connectString)) {
  17.             
  18.             using (SqlDataAdapter da = new SqlDataAdapter())
  19.             using (DataTable dt = new DataTable()) {
  20.                 
  21.                 da.SelectCommand = new SqlCommand("SELECT * FROM t1", con);
  22.                 SqlCommandBuilder builder = new SqlCommandBuilder(da);
  23.                 
  24.                 con.Open();
  25.                 
  26.                 // 検索結果をDataTableに退避
  27.                 da.Fill(dt);
  28.                 
  29.                 
  30.                 // 削除クエリー準備
  31.                 da.DeleteCommand = builder.GetDeleteCommand(true);
  32.                 da.DeleteCommand.Connection = con;
  33.                 
  34.                 // 更新クエリー準備
  35.                 da.UpdateCommand = builder.GetUpdateCommand(true);
  36.                 da.UpdateCommand.Connection = con;
  37.                 
  38.                 // 登録クエリー準備
  39.                 da.InsertCommand = builder.GetInsertCommand(true);
  40.                 da.InsertCommand.Connection = con;
  41.                 
  42.                 
  43.                 // 1行目のデータを更新
  44.                 dt.Rows[0]["value"] = "C#からデータ更新";
  45.                 
  46.                 // 新しい行の挿入
  47.                 DataRow dr = dt.NewRow();
  48.                 dr["id"] = 2;
  49.                 dr["value"] = "新しい行を追加";
  50.                 dt.Rows.Add(dr);
  51.                 
  52.                 // 行の更新と追加を実行
  53.                 da.Update(dt);
  54.             }
  55.             
  56.         }
  57.         
  58.     }
  59. }




実行してみると、ちゃんとデータの更新と追加が行われています。

713_03.png



【参考URL】

DataAdapter.Update() does not Update the Database

Update requires a valid InsertCommand when passed DataRow collection with new rows

SqlCommandBuilder クラス



テーマ:プログラミング - ジャンル:コンピュータ

  1. 2016/10/04(火) 23:05:23|
  2. SQL Server
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

SQL Server 2016 ExpressにMicrosoft JDBC Driver 6.0でJavaから接続

Windows Server 2016のポートを開放する(SQL Server 2016 外部接続許可)
ここで外部からのアクセスを許可したSQL Server 2016 Expressに
Javaで接続してみます。


Microsoft JDBC Driver 6.0



こちらのサイトからJDBCドライバを入手しました。
https://www.microsoft.com/ja-jp/download/details.aspx?id=11774

712_01.png


今回、Ubuntu 16.04 + OpenJDK 1.8で接続してみますので、
sqljdbc_6.0.7507.100_jpn.tar.gzをダウンロードしました。

712_02.png


「sqljdbc42.jar」を取り出し、ビルドパスに含めておきました。

712_03.png




データベース、テーブルの準備



「sample」というデータベースを作成し、「t1」というテーブルを用意しておきました。

712_04.png


ここにデータを登録、検索してみます。



Javaのサンプル



サンプルプログラムは以下の通り。


  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. public class Sample {
  6.     public static void main(String... args) {
  7.         String jdbc_url = "jdbc:sqlserver://192.168.1.104;databaseName=sample";
  8.         String user = "sa";
  9.         String password = "P@ssw0rd";
  10.         try (Connection con = DriverManager.getConnection(jdbc_url, user, password);
  11.             Statement stmt = con.createStatement()) {
  12.             
  13.             // データの登録
  14.             stmt.execute("INSERT INTO t1 (id, value) VALUES (1, 'Javaからテスト登録')");
  15.             
  16.             // 登録したデータの検索
  17.             ResultSet rs = stmt.executeQuery("SELECT * FROM t1");
  18.             while(rs.next()) {
  19.                 System.out.println(rs.getInt("id"));
  20.                 System.out.println(rs.getString("value"));
  21.             }
  22.         } catch (Exception e) {
  23.             e.printStackTrace();
  24.         }
  25.     }
  26. }





実行すると、ちゃんと登録したデータが検索できました。


1
Javaからテスト登録





ツールからも確認できます。

712_05.png


テーマ:サーバ - ジャンル:コンピュータ

  1. 2016/09/29(木) 23:19:58|
  2. SQL Server
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Windows Server 2016のポートを開放する(SQL Server 2016 外部接続許可)

Windows Server 2016にSQL Server 2016 Expressをインストール。
管理ツールもインストールしてみました。

SQL Server 2016 ExpressをWindows Server 2016へインストール
Windows Server 2016にSQL Server 2016 Management Toolsをインストール


このデータベースに別の端末から接続できるよう構成してみます。


TCP/IP接続の有効化



SQL Server 2016 構成マネージャーで、TCP/IP接続を許可します。
スタートメニューから構成マネージャーを起動。

711_01.png


[SQL Server ネットワークの構成] - [MSSQLSERVER のプロトコル]を選択します。
初期状態でTCP/IPが無効になっているので、右クリックで表示されるメニューから「有効化」を選択します。

711_02.png


「サービスを再開したら有効になる」というメッセージが表示されます。

711_03.png


[SQL Serverのサービス] - [SQL Server(MSSQLSERVER)]を選択し、再起動のボタンをクリックします。

711_04.png


これでSQL ServerにTCP/IPで接続できるようになりました。




Windows Firewallで1433ポートを許可



SQL Serverは1433ポートで通信します。
Windows Firewallでこのポートでの通信を許可してやります。

サーバーマネージャーから「セキュリティが強化されたWindows ファイアウォール」を起動

711_05.png


「受信の規則」へ「新しい規則」を追加します。

711_06.png


規則の追加手順は以下のとおり。
種類は「ポート」を選択。

711_07.png


TCP 1433ポートを許可。

711_08.png

711_09.png

711_10.png


ルールに適当な名前をつけて完了します。

711_11.png


ちゃんと追加されました。

711_12.png



接続確認



愛用している「HeidiSQL」でテストしました。
http://www.heidisql.com/

これひとつでMySQL(MariaDB)、PostgreSQL、SQL Serverに接続できるすぐれものです。

711_13.png


見事接続できました。

711_14.png


テーマ:サーバ - ジャンル:コンピュータ

  1. 2016/09/29(木) 00:47:32|
  2. SQL Server
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集

Windows Server 2016にSQL Server 2016 Management Toolsをインストール

Windows Server 2016にSQL Server 2016 Expressをインストールしました。
SQL Server 2016 ExpressをWindows Server 2016へインストール

続けて、SQL Server Management Studio (SSMS)をインストールしてみます。


インストーラのダウンロード



SQL Server インストールセンターの画面から「SQL Server Management Toolsのインストール」をクリックします。

710_01.png


これでインストールが始まると思ったら、インストーラーのダウンロードページが表示されます。

710_02.png


https://msdn.microsoft.com/ja-jp/library/mt238290.aspx

こちらから「SQL Server Management Studio (16.4.1) のダウンロード」をクリック。
「SSMS-Setup-JPN.exe」を取得しました。




インストール



ダウンロードした「SSMS-Setup-JPN.exe」を実行し、インストーラーの指示通りインストール。

710_03.png

710_04.png

710_05.png

710_06.png

あっさりインストール完了です。




起動とデータベースへの接続



メニューに「SQL Server Management Studio」が追加さrています。

710_07.png


SQL Serverインストール時、SQL Serverの管理者に現在のユーザーを追加しているので、
Windows認証でそのまま接続できます。

710_08.png

710_09.png

テーマ:サーバ - ジャンル:コンピュータ

  1. 2016/09/29(木) 00:18:56|
  2. SQL Server
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ