Skip to content

Instantly share code, notes, and snippets.

@KentaYamada
Last active August 29, 2015 14:05
Show Gist options
  • Save KentaYamada/d4e79076dc32ad7fd3b9 to your computer and use it in GitHub Desktop.
Save KentaYamada/d4e79076dc32ad7fd3b9 to your computer and use it in GitHub Desktop.
複数行InsertするSQLを作る
//複数データを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