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で見るとこのようになります。