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

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月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月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月1日

【VB】LINQ to SQL (ExecuteQuery)


DataContextクラスのExecuteQueryメソッドでSQLクエリを直接記述して実行することもできます。


Dim db = New LinqTest02.DataClasses1DataContext()

Dim query = db.ExecuteQuery(Of T_Animals)("SELECT [ID], [Name], [Type] FROM [T_Animals]")

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



2016年10月29日

【VB】LINQ to SQL (実際のクエリを確認する方法)


LINQ to SQLでは、LINQのクエリをSQL文に変換してデータベースに送信して実行しているのですが、その送信されるSQLは確認するには以下のようにします。


Dim db = New LinqTest02.DataClasses1DataContext()

Dim query = From n In db.T_Animals
            Select n

'コンソールに出力
db.Log = Console.Out

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

LogプロパティにConsole.Outを割り当てることでSQLクエリがコンソールに出力されます。

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




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月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月21日

【VB】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 パトラッシュ

2016年9月22日

SqlCommand.ExecuteNonQuery メソッドを使ってSQLの実行



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月15日

SqlDataReader.Readメソッドを使ってデータを読み込む



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月13日

ADO.NETでSQL Serverに接続する



ADO.NETを使ってSQL Serverへ接続するには、SqlConnectionクラスを使います。

まずは、using(VBはImports)で System.Data.SqlClient 名前空間を使えるようにしてください。

コードは下記のようになります。

■C#
// 接続文字列の作成
string ConnectionString = string.Empty;
// SQL Server認証
ConnectionString = @"Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;User Id=sa;Password=xxxxx";
// Windows認証
//ConnectionString = @"Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True";

// SqlConnectionクラスの新しいインスタンスを初期化
var cnn = new SqlConnection(ConnectionString);

// データベース接続を開く
cnn.Open();

// データベースへの接続を閉じる
cnn.Close();


■VB
'接続文字列の作成
Dim ConnectionString As String = String.Empty
'SQL Server認証
ConnectionString = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;User Id=sa;Password=xxxxx"
'Windows認証
'ConnectionString = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;Integrated Security=True"

'SqlConnectionクラスの新しいインスタンスを初期化
Dim cnn = New SqlConnection(ConnectionString)

'データベース接続を開く
cnn.Open()

'データベースへの接続を閉じる
cnn.Close()


上記の例では、ConnectionString にSQL Server認証のIDとパスワードをベタ打ちしていますが、これだとやはりセキュリティ的に問題がありますので、実際にはIDとパスワードを変数に持たせて読み込ませるとか、上記コメント部分に書いたWindows認証を使うようにしてください。