Last active
August 29, 2015 14:05
-
-
Save KentaYamada/d4e79076dc32ad7fd3b9 to your computer and use it in GitHub Desktop.
複数行InsertするSQLを作る
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//複数データを1つのInsert文で発行して実行するプログラムのサンプル | |
//使用DB:SQL-Server208R2 | |
//※1 SQL-Server2008以降でサポートされている構文です。 | |
//※2 Oracleは"Insert all"という構文を使って同様のことを実現することができます。 | |
//※3 PostgreSQL8.2以降でもSQL-Serverと同じ構文で実現できる(らしい) | |
using System; | |
using System.Data.SqlClient; | |
using System.Text; | |
public class Sample | |
{ | |
private static readonly string ConnectString = @"Data Source=(local)\SQLEXPRESS; Initial Catalog=SampleDB; Integrated Security=SSPI;"; | |
static void Main() | |
{ | |
using (var conn = new SqlConnection(ConnectString)) | |
using (var comm = new SqlCommand()) | |
{ | |
var sql = new StringBuilder(); | |
sql.Length = 0; | |
sql.Append("insert into emp values"); | |
for (int i = 1; i <= 100; i++) | |
{ | |
if (i == 1) | |
{ | |
sql.AppendFormat("(@empno_{0}, @empname_{0}, @sal_{0}, @hiredate_{0}, @deptno_{0})\n", i); | |
} | |
else | |
{ | |
sql.AppendFormat(",(@empno_{0}, @empname_{0}, @sal_{0}, @hiredate_{0}, @deptno_{0})\n", i); | |
} | |
//Create parameters | |
var empno = comm.CreateParameter(); | |
empno.ParameterName = string.Format("@empno_{0}", i); | |
empno.Value = i; | |
comm.Parameters.Add(empno); | |
var empname = comm.CreateParameter(); | |
empname.ParameterName = string.Format("@empname_{0}", i); | |
empname.Value = string.Format("emp{0}", i); | |
comm.Parameters.Add(empname); | |
var sal = comm.CreateParameter(); | |
sal.ParameterName = string.Format("@sal_{0}", i); | |
sal.Value = i * 100; | |
comm.Parameters.Add(sal); | |
var hiredate = comm.CreateParameter(); | |
hiredate.ParameterName = string.Format("@hiredate_{0}", i); | |
hiredate.Value = DBNull.Value; | |
comm.Parameters.Add(hiredate); | |
var deptno = comm.CreateParameter(); | |
deptno.ParameterName = string.Format("@deptno_{0}", i); | |
deptno.Value = 10; | |
comm.Parameters.Add(deptno); | |
} | |
comm.Connection = conn; | |
comm.CommandText = sql.ToString(); | |
conn.Open(); | |
using (var tran = conn.BeginTransaction()) | |
{ | |
try | |
{ | |
comm.Transaction = tran; | |
comm.ExecuteNonQuery(); | |
tran.Commit(); | |
Console.WriteLine("success"); | |
} | |
catch (SqlException ex) | |
{ | |
tran.Rollback(); | |
Console.WriteLine(ex.Message); | |
} | |
finally | |
{ | |
comm.Parameters.Clear(); | |
} | |
} | |
} | |
Console.ReadKey(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment