ラベル SQL Server の投稿を表示しています。 すべての投稿を表示
ラベル SQL Server の投稿を表示しています。 すべての投稿を表示

2017年10月29日

【Linux】Linux Mint にSQL Serverをインストールしてみた




先日、SQL ServerのLinux版が正式にリリースされたということで、試しにLinux Mintにインストールしてみました。



まずは下記のサイトに行きます。

https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads


サイトに行ったら、Linuxのメニューから「Ubuntu Linux 16.04 にインストールする」をクリックします。
Linux Mint 18 は、Ubuntu Linux 16.04 がベースになっていますので、これをクリックします。

クリックするとインストール手順が書かれたページが開きますので、この手順にそってインストールを行ってみます。



まず、パブリックリポジトリ鍵キーをインポートします。
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

次に、Microsoft SQL Server Ubuntu リポジトリを登録します。
$ sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"

この2つに関してはよく分かりませんが、おそらくGitか何かのリポジトリにアクセスするためのものと思われます。とりあえず書いてあるとおりに実行します。


ここまで出来たら、SQL Serverをインストールします。

つぎのようにコマンドを打ちます。
$ sudo apt-get update
$ sudo apt-get install -y mssql-server


パッケージのインストールが完了したらエディションを選択します。
$ sudo /opt/mssql/bin/mssql-conf setup
SQL Server のエディションを選択します:
  1) Evaluation (無料、製品使用権なし、期限 180 日間)
  2) Developer (無料、製品使用権なし)
  3) Express (無料)
  4) Web (有料)
  5) Standard (有料)
  6) Enterprise (有料)
  7) Enterprise Core (有料)
  8) 小売販売チャネルを介してライセンスを購入し、入力するプロダクト キーを持っています。

エディションの詳細については、以下を参照してください
https://go.microsoft.com/fwlink/?LinkId=852748&clcid=0x411

このソフトウェアの有料エディションを使用するには、個別のライセンスを以下から取得する必要があります
Microsoft ボリューム ライセンス プログラム。
有料エディションを選択することは、
このソフトウェアをインストールおよび実行するための適切な数のライセンスがあることを確認していることになります。

エディションを入力してください(1-8): 2
Evaluation、Developer、Expressが無料で使えます。
今回、Developer版を選びました。


次にライセンス条項の同意を求めてきます。
この製品のライセンス条項は
/usr/share/doc/mssql-server で参照できるほか、次の場所からダウンロードすることもできます:
https://go.microsoft.com/fwlink/?LinkId=855862&clcid=0x411

プライバシーに関する声明は、次の場所で確認できます:
https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x411

ライセンス条項に同意しますか? [Yes/No]:Y
Yで同意します。


次に言語の設定です。
SQL Server の言語の選択:
(1) English
(2) Deutsch
(3) Español
(4) Français
(5) Italiano
(6) 日本語
(7) 한국어
(8) Português
(9) Русский
(10) 中文 – 简体
(11) 中文 (繁体)
オプション 1-11 を入力: 6
日本語を選択します。


次にsaのパスワードを設定します。
SQL Server システム管理者パスワードを入力してください: 
SQL Server システム管理者パスワードを確認入力してください: 
SQL Server を構成しています...

Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /lib/systemd/system/mssql-server.service.
セットアップは正常に完了しました。SQL Server を起動しています。


最後にサービスが実行されていることを確認し、実行されていればとりあえずインストールは完了です。
$ systemctl status mssql-server


次に、コマンドラインツールをインストールしていきます。
これはsqlcmdとbcpを使えるようにするためのものです。

これも手順通りに実行します。

パブリックリポジトリ鍵キーのインポート。
$ curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

Microsoft Ubuntu リポジトリを登録。
$ sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list)"

ソースリストを更新し、unixODBC 開発者のパッケージでインストール コマンドを実行。
$ sudo apt-get update
$ sudo apt-get install -y mssql-tools unixodbc-dev

パス環境変数
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
$ echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
$ source ~/.bashrc



では、実際にデータベースを作成して、テーブルを作成し、データを挿入してみたいと思います。


まずは、データベースエンジンに接続。
$ sqlcmd -S localhost -U SA -P 'パスワード'


次に、データベースの作成
1> CREATE DATABASE MYDB
2> GO
1> SELECT Name FROM sys.Databases
2> GO
Name                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------
master                                                                                                                          
tempdb                                                                                                                          
model                                                                                                                           
msdb                                                                                                                            
TestDB                                                                                                                          
MYDB                                                                                                                            

(6 rows affected)


そして、データベースMYDBを選択し、
1> USE MYDB
2> GO
データベース コンテキストが 'MYDB' に変更されました。


テーブルの作成します。
1> CREATE TABLE T_Mascots ([ID] [int] NOT NULL, [Name] NVARCHAR(50) NULL, [Type] NVARCHAR(50) NULL)
2> GO
1> SELECT Name FROM sys.tables
2> GO
name                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------
T_Mascots                                                                                                                       

(1 rows affected)


最後にデータを挿入してみます。
1> INSERT INTO T_Mascots VALUES (1, 'あゆコロちゃん', 'ぶた')
2> GO

(1 rows affected)
1> INSERT INTO T_Mascots VALUES (2, 'ぐんまちゃん', 'ポニー')
2> GO

(1 rows affected)
1> INSERT INTO T_Mascots VALUES (3, 'ひこにゃん', '猫')
2> GO

(1 rows affected)


SELECT文でデータを参照してみます。
1> SELECT ID, Name, Type FROM T_Mascots
2> GO
ID          Name                                               Type                                              
----------- -------------------------------------------------- --------------------------------------------------
          1 あゆコロちゃん                                            ぶた                                                
          2 ぐんまちゃん                                             ポニー                                               
          3 ひこにゃん                                              猫                                                 

(3 rows affected)

ちゃんと挿入したデータが表示できました。

まだここまでしか使っていませんが、Windows版とまったく同じ操作でデータベースにアクセス出来るのにはちょっと感動です。まあ、マイクロソフトはそのように作ったと言ってるので、当たり前と言えば当たり前ですが、けっこうすごいことだと思います。

いままで、SQL Serverを使うにはWindowsマシンが必ず必要でしたが、これからはLinuxマシンでもいいということになります。これは別の言い方をすれば、SQL ServerのためにWindowsマシンを用意しなくてもいいということになります。高価なWindows Server OS を用意できないような中小零細企業などにはかなりメリットがあると思えますね。


<関連記事>
Windows10マシンにデュアルブートでインストールしたLinux Mintを削除する方法
Windows10マシンにLinux Mintをインストールしてデュアルブート化してみた。
【Linux】Linux Mint にPowerShellをインストールしてみた。
Linux Mint にSophos Anti-Virus for Linux(Free Edition)を入れてみた
【Linux】viの使い方はとりあえずこれだけ知っていればなんとかなる
【Linux】Linux MintでGRUBのメニューの順番を変える


2017年7月31日

【Excel】SQL Serverからデータを取得してシートに表示するマクロ


SQL Serverからデータを取得してシートに表示するマクロです。

まず、SQL Serverでこのようなデータが格納されていたとします。

テーブル名:T_Users

このデータを次のシートに格納してみます。

1行目には列名をあらかじめ入力しています。

では、実際のコードは次のようになります。
Sub GetSQLData()

    Dim cnn As New ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rst As ADODB.Recordset
    Dim i As Integer
    
    cnn.Open "Driver={SQL Server}; Server=xxxxxx; Database=xxxxxx; UID=xxxxx; PWD=xxxxx;"
    
    Set cmd = New ADODB.Command
    
    With cmd
        .ActiveConnection = cnn
        .CommandText = "SELECT ID, EmployeeNumber, FirstName, LastName FROM T_Users"
        .CommandType = adCmdText
    End With
    
    'SQLを実行
    Set rst = cmd.Execute
    
    i = 2
    
    While rst.EOF = False
        'セルにデータを格納
        Cells(i, 1).Value = rst!ID
        Cells(i, 2).Value = rst!EmployeeNumber
        Cells(i, 3).Value = rst!FirstName
        Cells(i, 4).Value = rst!LastName
    
        'レコードを移動
        rst.MoveNext
        i = i + 1
    Wend
    
    rst.Close
    Set rst = Nothing
    Set cmd = Nothing
    cnn.Close
    Set cnn = Nothing
    
End Sub

実行結果



2016年11月10日

【VB】LINQ to SQL (データの削除)


LINQ to SQLによるデータの削除方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん ポニー

VB
Dim db = New LinqTest02.DataClasses1DataContext()

Dim query = From n In db.T_Animals
            Where n.ID = 7
            Select n

For Each q In query
    'エンティティを削除保留状態にする
    db.T_Animals.DeleteOnSubmit(q)
Next

'データベースへ変更内容を送信
db.SubmitChanges()

Dim result = From n In db.T_Animals
             Select n

For Each r In result
    Console.WriteLine("{0}, {1}, {2}", r.ID, r.Name, r.Type)
Next

実行結果




2016年11月9日

【C#】LINQ to SQL (データの削除)


LINQ to SQLによるデータの削除方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん ポニー

C#
var db = new LinqTest01.DataClasses1DataContext();

var query = from n in db.T_Animals
            where n.ID == 7
            select n;

foreach (var q in query)
{
    // エンティティを削除保留状態にする
    db.T_Animals.DeleteOnSubmit(q); 
}

// データベースへ変更内容を送信
db.SubmitChanges();

var result = from n in db.T_Animals
             select n;

foreach (var r in result)
{
    Console.WriteLine("{0}, {1}, {2}", r.ID, r.Name, r.Type);
}


実行結果




2016年11月8日

【VB】LINQ to SQL (データの更新)


LINQ to SQLによるデータの更新方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん

VB
Dim db = New LinqTest02.DataClasses1DataContext()

Dim query = From n In db.T_Animals
            Where n.ID = 13
            Select n

'クエリーの実行
For Each q In query
    q.Type = "ポニー"
Next

'データベースへ変更内容を送信
db.SubmitChanges()

For Each q In query
    Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type)
Next

実行結果

ぐんまちゃんは実はポニーだった!



2016年11月7日

【C#】LINQ to SQL (データの更新)


LINQ to SQLによるデータの更新方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん
13 ぐんまちゃん

C#
var db = new LinqTest01.DataClasses1DataContext();

var query = from n in db.T_Animals
            where n.ID == 13
            select n;

// クエリーの実行
foreach (var q in query)
{
    q.Type = "ポニー";
}

// データベースへ変更内容を送信
db.SubmitChanges();

foreach (var q in query)
{
    Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type);
}

実行結果

ぐんまちゃんは実はポニーだった!


2016年11月4日

【VB】LINQ to SQL (データの挿入)


LINQ to SQLによるデータの挿入方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん


VB
Dim db = New LinqTest02.DataClasses1DataContext()

'追加オブジェクトを作成
Dim anm As New T_Animals With {
    .ID = 13,
    .Name = "ぐんまちゃん",
    .Type = "馬"}

'T_Animalsコレクションにオブジェクトを追加
db.T_Animals.InsertOnSubmit(anm)

'データベースへ変更内容を送信
db.SubmitChanges()

Dim query = From n In db.T_Animals
            Select n

For Each q In query
    Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type)
Next

結果はこのようになります。




2016年11月2日

【C#】LINQ to SQL (データの挿入)


LINQ to SQLによるデータの挿入方法です。

まず、あらかじめSQL Serverに以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ
12 バリィさん


C#
var db = new LinqTest01.DataClasses1DataContext();

// 追加オブジェクトを作成
T_Animals anm = new T_Animals
{
    ID = 13,
    Name = "ぐんまちゃん",
    Type = "馬"
};

// T_Animalsコレクションにオブジェクトを追加
db.T_Animals.InsertOnSubmit(anm);

// データベースへ変更内容を送信
db.SubmitChanges();


var query = from n in db.T_Animals
            select n;

foreach (var q in query)
{
    Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type);
}

結果はこのようになります。


2016年10月27日

【VB】LINQ to SQL (接続文字列を指定する)


O/Rデザイナーで作成すると、通常App.configにデータベースへの接続文字列が書かれるのですが、ソースの中で設定することもできます。

Dim connectionString As String = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB2;Integrated Security=True"

Dim db = New LinqTest02.DataClasses1DataContext(connectionString)



2016年10月26日

【C#】LINQ to SQL (接続文字列を指定する)


O/Rデザイナーで作成すると、通常App.configにデータベースへの接続文字列が書かれるのですが、ソースの中で設定することもできます。

string connectionString = @"Data Source=MOUSEPC\MSSQLSERVER;Initial Catalog=TESTDB2;Integrated Security=True";

var db = new LinqTest01.DataClasses1DataContext(connectionString);




2016年10月25日

【VB】LINQ to SQL


LINQ to SQLのやり方です。

LINQ to SQLは、データソースの対象がSQL Serverの場合に使います。


まずVisual Studioでプロジェクトを作成したら、新しい項目の追加で「LINQ to SQL クラス」を追加します。

次にサーバーエクスプローラーからテーブルをドラッグしてきて、O/Rデザイナーにドロップします。


するとこのようなT_Animalsという名前のエンティティクラスが作成されます。

あとは、次のようにコードします。

Sub Main()

    Dim db = New LinqTest02.DataClasses1DataContext()

    Dim query = From n In db.T_Animals
                Select n

    For Each q In query
        Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type)
    Next

End Sub


結果はこのようになります。
1, たま, 猫
2, ピーター, うさぎ
3, トム, 猫
4, お父さん, 犬
5, ふてニャン, 猫
6, プー, くま
7, ファーファ, くま
8, ラスカル, アライグマ
9, サトちゃん, 象
10, チーバくん, 犬
11, パトラッシュ, 犬


<参考サイト>
チュートリアル : LINQ to SQL クラスの作成 (O/R デザイナー)


2016年10月24日

【C#】LINQ to SQL


LINQ to SQLのやり方です。

LINQ to SQLは、データソースの対象がSQL Serverの場合に使います。


まずVisual Studioでプロジェクトを作成したら、新しい項目の追加で「LINQ to SQL クラス」を追加します。

次にサーバーエクスプローラーからテーブルをドラッグしてきて、O/Rデザイナーにドロップします。


するとこのようなT_Animalsという名前のエンティティクラスが作成されます。

あとは、次のようにコードします。

static void Main(string[] args)
{
    var db = new LinqTest01.DataClasses1DataContext(c_connection);

    var query = from n in db.T_Animals
                select n;

    foreach (var q in query )
    {
        Console.WriteLine("{0}, {1}, {2}", q.ID, q.Name, q.Type);
    }
}


結果はこのようになります。
1, たま, 猫
2, ピーター, うさぎ
3, トム, 猫
4, お父さん, 犬
5, ふてニャン, 猫
6, プー, くま
7, ファーファ, くま
8, ラスカル, アライグマ
9, サトちゃん, 象
10, チーバくん, 犬
11, パトラッシュ, 犬


<参考サイト>
チュートリアル : LINQ to SQL クラスの作成 (O/R デザイナー)


2016年10月21日

【VB】SqlDataAdapterによる追加・更新・削除


以前、SqlDataAdapterにより抽出したデータをDataGridViewに表示する方法をご紹介しましたが、今回はDataGridViewに表示したデータを変更したり削除したり、または追加して、それをSQL Serverに反映させる方法をご紹介します。

ちなみに、今回も開発ツールは、Visual Studio Community 2015 を使っています。


まず、フォームにこのようにコントロールを貼り付け、下記のように名前を付けてください。

コントロール 名前
DataGridView dgv
Button buttonView
Button buttonOK
Button buttonCancel
Button buttonApply

2016年10月20日

【C#】SqlDataAdapterによる追加・更新・削除


以前、SqlDataAdapterにより抽出したデータをDataGridViewに表示する方法をご紹介しましたが、今回はDataGridViewに表示したデータを変更したり削除したり、または追加して、それをSQL Serverに反映させる方法をご紹介します。

ちなみに、今回も開発ツールは、Visual Studio Community 2015 を使っています。


まず、フォームにこのようにコントロールを貼り付け、下記のように名前を付けてください。

コントロール 名前
DataGridView dgv
Button buttonView
Button buttonOK
Button buttonCancel
Button buttonApply

2016年10月11日

SqlDataAdapterにより抽出したデータをDataGridViewに表示する



SqlDataAdapterは、SQL Serverからデータを取得してデータセットに格納する役割を持っています。
また、データセットに格納したデータの変更をデータベースに反映させることもできます。

以下に、SQL ServerからSqlDataAdapterを使ってデータを抽出して、フォーム上のDataGridViewに値を表示する例を示します。

ちなみに、開発ツールは、Visual Studio Community 2015 を使っています。

まず、Visual Studioを起動したら新しいプロジェクトを作成してください。
作成は、メニューの[ファイル]-[新規作成]-[プロジェクト]から行えます。


選ぶのは「Windowsフォームアプリケーション」です。



プロジェクトを作成したら、フォームにツールボックスからDataGridViewとButtonを1個ずつ貼り付けてください。

DataGridViewとButtonの名前はそれぞれ以下のようにします。

コントロール 名前
DataGridView dgv
Button buttonView

そして、buttonViewのクリックイベントハンドラに下記のように記述します。

C#
private void buttonView_Click(object sender, EventArgs e)
{
    string ConnectionString = @"Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True";

    var cnn = new SqlConnection(ConnectionString);
    cnn.Open();

    // データアダプタオブジェクトの作成
    var adapter = new SqlDataAdapter("SELECT [ID], [Name], [Type] FROM [T_Animals]", cnn);

    // データセットオブジェクトの作成
    var ds = new DataSet();

    // 抽出したデータをデータセットに格納
    adapter.Fill(ds);

    // DataGridViewのデータソースにデータセットのテーブルをバインド
    this.dgv.DataSource = ds.Tables[0];
}

VB
Private Sub buttonView_Click(sender As Object, e As EventArgs) Handles buttonView.Click

    Dim ConnectionString As String = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True"

    Dim cnn = New SqlConnection(ConnectionString)
    cnn.Open()

    'データアダプタオブジェクトの作成
    Dim adapter = New SqlDataAdapter("SELECT [ID], [Name], [Type] FROM [T_Animals]", cnn)

    'データセットオブジェクトの作成
    Dim ds = New DataSet()

    '抽出したデータをデータセットに格納
    adapter.Fill(ds)

    'DataGridViewのデータソースにデータセットのテーブルをバインド
    Me.dgv.DataSource = ds.Tables(0)
End Sub



実行して「表示」ボタンを押すとDataGridViewにデータを表示されます。

2016年10月10日

SQL ServerのストアドプロシージャからOUTPUTと戻り値を受け取る



SQL ServerのストアドプロシージャからOUTPUTと戻り値を受け取る方法です。

ちなみに今回もSQL Serverにあらかじめ以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ

また、usp_get_outputという名前のストアドプロシージャをあらかじめ作っておきます。
USE [TESTDB]
GO
CREATE PROCEDURE [dbo].[usp_get_output]
 @ID int, 
 @Name nvarchar(50) OUTPUT
AS
BEGIN
 SET NOCOUNT ON;

 SET @Name = (SELECT [Name]
 FROM [dbo].[T_Animals]
 WHERE [ID] = @ID)

 RETURN 0
END

パラメータにOUTPUTがついてるものがありますが、これがアウトプット引数で、このパラメータによりデータを受け取ることができます。
また、終わりにRETURN 0とありますが、ここで指定してる「0」が戻り値になります。

C#
string ConnectionString = string.Empty;
ConnectionString = @"Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True";

var cnn = new SqlConnection(ConnectionString);
cnn.Open();

var cmd = new SqlCommand();
cmd.Connection = cnn;

// コマンド文字列の解釈方法を指定
cmd.CommandType = System.Data.CommandType.StoredProcedure;

// INPUT
int inputId = 5;

// データソースで実行するストアドプロシージャを指定
cmd.CommandText = "[usp_get_output]";
cmd.Parameters.Clear();
cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = inputId;

// OUTPUT
cmd.Parameters.Add("@Name", System.Data.SqlDbType.NVarChar, 50);
cmd.Parameters["@Name"].Direction = System.Data.ParameterDirection.Output;

// RETURN
cmd.Parameters.Add("ReturnValue", System.Data.SqlDbType.Int);
cmd.Parameters["ReturnValue"].Direction = System.Data.ParameterDirection.ReturnValue;

cmd.ExecuteNonQuery();

Console.WriteLine("インプット:" + inputId.ToString());

string name = cmd.Parameters["@Name"].Value.ToString();
Console.WriteLine("アウトプット:" + name);

int rtn = (int)cmd.Parameters["ReturnValue"].Value;
Console.WriteLine("戻り値:" + rtn.ToString());

cmd.Dispose();
cnn.Close();

VB
Dim ConnectionString As String = String.Empty
ConnectionString = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True"

Dim cnn = New SqlConnection(ConnectionString)

cnn.Open()

Dim cmd = New SqlCommand()

cmd.Connection = cnn

cmd.CommandType = System.Data.CommandType.StoredProcedure

'INPUT
Dim inputId As Integer = 5

'データソースで実行するストアドプロシージャを指定
cmd.CommandText = "[usp_get_output]"
cmd.Parameters.Clear()
cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = inputId

'OUTPUT
cmd.Parameters.Add("@Name", System.Data.SqlDbType.NVarChar, 50)
cmd.Parameters("@Name").Direction = System.Data.ParameterDirection.Output

'RETURN
cmd.Parameters.Add("ReturnValue", System.Data.SqlDbType.Int)
cmd.Parameters("ReturnValue").Direction = System.Data.ParameterDirection.ReturnValue

cmd.ExecuteNonQuery()

Console.WriteLine("インプット:" & inputId.ToString())

Dim name As String = cmd.Parameters("@Name").Value.ToString()
Console.WriteLine("アウトプット:" & name)

Dim rtn As Integer = DirectCast(cmd.Parameters("ReturnValue").Value, Integer)
Console.WriteLine("戻り値:" + rtn.ToString())

cmd.Dispose()
cnn.Close()

結果は下記のようになります。
インプット:5
アウトプット:ふてニャン
戻り値:0



2016年10月9日

SQL Serverにストアドプロシージャを使ってデータを追加する



SQL Serverにストアドプロシージャを使ってデータを追加する方法です。

ちなみに今回もSQL Serverにあらかじめ以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ

また、usp_ins_animals_dataという名前のストアドプロシージャをあらかじめ作っておきます。
USE [TESTDB]
GO
CREATE PROCEDURE [dbo].[usp_ins_animals_data]

 @ID int,
 @Name nvarchar(50),
 @Type nvarchar(50)
AS
BEGIN
 SET NOCOUNT ON;

 INSERT INTO [dbo].[T_Animals]
  ([ID]
  ,[Name]
  ,[Type])
 VALUES
  (@ID
  ,@Name
  ,@Type)
END

ちなみに@から始まる変数は、パラメータです。

C#
string ConnectionString = string.Empty;
ConnectionString = @"Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True";

var cnn = new SqlConnection(ConnectionString);
cnn.Open();

var cmd = new SqlCommand();
cmd.Connection = cnn;

// コマンド文字列の解釈方法を指定
cmd.CommandType = System.Data.CommandType.StoredProcedure;

// データソースで実行するストアドプロシージャを指定
cmd.CommandText = "[usp_ins_animals_data]";
cmd.Parameters.Clear();
cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = 12;
cmd.Parameters.Add("@Name", System.Data.SqlDbType.NVarChar, 50).Value = "バリィさん";
cmd.Parameters.Add("@Type", System.Data.SqlDbType.NVarChar, 50).Value = "鳥";

cmd.ExecuteNonQuery();

cmd.Dispose();
cnn.Close();

VB
Dim ConnectionString As String = String.Empty
ConnectionString = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True"

Dim cnn = New SqlConnection(ConnectionString)

cnn.Open()

Dim cmd = New SqlCommand()

cmd.Connection = cnn

'コマンド文字列の解釈方法を指定
cmd.CommandType = System.Data.CommandType.StoredProcedure

'データソースで実行するTransact-SQLステートメントを指定
cmd.CommandText = "[usp_ins_animals_data]"
cmd.Parameters.Clear()
cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = 12
cmd.Parameters.Add("@Name", System.Data.SqlDbType.NVarChar, 50).Value = "バリィさん"
cmd.Parameters.Add("@Type", System.Data.SqlDbType.NVarChar, 50).Value = "鳥"

'CommandTextをConnectionに送信し、SqlDataReaderを構築
cmd.ExecuteNonQuery()

cmd.Dispose()
cnn.Close()

基本的には、直接SQL文を書く方法と変わりません。
違うのは、CommandType の指定方法と、CommandText にストアドプロシージャ名を指定するところです。

結果をManagement Studioで見るとこのようになります。



2016年10月6日

SQL Serverのデータをストアドプロシージャを使って取得する



SQL Serverからストアドプロシージャを使ってデータを取得する方法です。

ちなみに今回もSQL Serverにあらかじめ以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ

2016年9月27日

パラメータークエリを使用してSQL Serverからデータを読み込む



パラメーターを使ってSQL Serverからデータを読み込む方法です。

ちなみに今回、SQL Serverにあらかじめ以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ


2016年9月24日

SqlCommand.ExecuteScalar メソッドを使って結果を取得する。



SQL Serverにクエリをかけて、その結果を得たいといった場合があります。
例えば、ある条件に当てはまるレコードの件数を知りたいといった場合です。

そういうときは、SqlCommand.ExecuteScalar メソッドを使います。

ちなみに今回も、SQL Serverにあらかじめ以下のようなテーブルを作成しています。

テーブル名:T_Animals

列名
[ID] [int] NOT NULL
[Name] [nvarchar](50) NULL
[Type] [nvarchar](50) NULL

格納されてるデータ
ID Name Type
1 たま
2 ピーター うさぎ
3 トム
4 お父さん
5 ふてニャン
6 プー くま
7 ファーファ くま
8 ラスカル アライグマ
9 サトちゃん
10 チーバくん
11 パトラッシュ