コメント
Re: 参考になりました
参考になりました
ただNo3についてはこれだけでは動かず、もう少し調べてみると、
SQL Server側で同フィールドのユーザ定義テーブルも作成しておく必要がありそうですね。
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
Sub Test(ByVal dt As DataTable)
Dim con As New SqlConnection("connection string")
Dim cmd As New SqlCommand
Dim sql As New StringBuilder
con.Open()
cmd.Connection = con
cmd.Parameters.Clear()
'データテーブルの行分だけループしている悪い例
For i As Integer = 0 To dt.Rows.Count - 1
sql.AppendLine("INSERT INTO dbo.T_TEST ")
sql.AppendLine(" ( ")
sql.AppendLine(" CODE ")
sql.AppendLine(") VALUES ( ")
sql.AppendLine(" @Code ")
sql.AppendLine("); ")
'パラメータの作成
Dim param = New SqlParameter("@Code", SqlDbType.Int, ParameterDirection.Input)
param.Value = dt.Rows(i).Item(0).ToString()
'パラメータを渡します。
cmd.Parameters.Add(param)
'SQLの実行
cmd.CommandType = CommandType.Text
cmd.CommandText = sql.ToString()
cmd.ExecuteNonQuery
Next i
End Sub
Sub Test(ByVal dt As DataTable)
Dim con As New SqlConnection("connection string")
Dim cmd As New SqlCommand
Dim sql As New StringBuilder
con.Open()
cmd.Connection = con
cmd.Parameters.Clear()
sql.AppendLine("INSERT INTO dbo.T_TEST ")
sql.AppendLine(" ( ")
sql.AppendLine(" CODE ")
sql.AppendLine(" ) ")
sql.AppendLine(" SELECT TestCode ")
sql.AppendLine(" FROM @TestTable ")
sql.AppendLine(" WHERE TestCode = @Code ")
sql.AppendLine("); ")
'パラメータの作成
Dim params(1) As SqlParameters
params(0) = New SqlParameter("@Code", SqlDbType.Int, ParameterDirection.Input)
params(0).Value = 1
params(1) = New SqlParameter("@TestTable", SqlDbType.Structured, ParameterDirection.Input) 'TypeにSqlDbType.Structuredを渡します。
params(1).TypeName = "dbo.TestTableType" 'テーブルタイプの名称を渡します。
params(1).Value = dt '編集したデータテーブルを渡します。
'パラメータ配列を渡します。
cmd.Parameters.AddRange(params)
'SQLの実行
cmd.CommandType = CommandType.Text
cmd.CommandText = sql.ToString()
cmd.ExecuteNonQuery
End Sub
Sub Test(ByVal dt As DataTable)
Dim con As New SqlConnection("connection string")
Dim cmd As New SqlCommand
con.Open()
cmd.Connection = con
cmd.Parameters.Clear()
'パラメータの作成
Dim params(1) As SqlParameters
params(0) = New SqlParameter("@Code", SqlDbType.Int, ParameterDirection.Input)
params(0).Value = 1
params(1) = New SqlParameter("@TestTable", SqlDbType.Structured, ParameterDirection.Input) 'TypeにSqlDbType.Structuredを渡します。
params(1).TypeName = "dbo.TestTableType" 'テーブルタイプの名称を渡します。
params(1).Value = dt '編集したデータテーブルを渡します。
'パラメータ配列を渡します。
cmd.Parameters.AddRange(params)
'プロシージャの実行
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "dbo.TestProcedure"
cmd.ExecuteNonQuery
End Sub
CREATE PROCEDURE dbo.TestProcedure
@Code INT,
@TestTable dbo.TestTableType READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO T_TEST
(
CODE
)
SELECT TestCode
FROM @TestTable
WHERE TestCode = @Code
;
END;
GO
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。