2012/08/12
C#.NETでSQL
Java 案件に投入されたはずがいつのまにか C#.NET
案件にすり代わっていたでござるよ。*゚д゚)エエェェ
C# なんて10年くらい前にチョコっとやったことが有るくらい。
まだ .NET でも無かったし。 と言うわけで納期は目の前にもかかわらず C#.NET で SQL の使い方とか基本的なとこからお勉強。
間に合うのかね ┐(´ー`)┌ とりあえずテーブルに挿入して自動採番された ID を取得するとこまでググって整理してみた。
using System.Data;
using System.Data.SqlClient;
{
string url = @"Server=.\SQLEXPRESS;database=;uid=;pwd=";
SqlConnection db = new SqlConnection(url);
db.Open();
SqlTransaction tx = db.BeginTransaction(IsolationLevel.Serializable);
string sql = "INSERT INTO tblTEST(text1,text2)"
+ " VALUES (@text1,@text2);"
+ "SELECT @id = IDENT_CURRENT('tblTEST')";
SqlCommand cmd = new SqlCommand(sql, db, tx);
cmd.Parameters.Add("@text1", SqlDbType.VarChar, 10).Value = "text1";
cmd.Parameters.Add("@text2", SqlDbType.VarChar, 10).Value = "text2";
cmd.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output;
int newId = cmd.Parameters["@id"].Value;
tx.Commit();
db.Close();
}
一応、動いた。
あれ? PHP+SQLServerでやった時は OUTPUT とかって機能が有ったはずなんだよね..
調べたら SQLServer/2005 以降には OUTPUT が有る。
けど C#.NET 用のサンプルが見当たらない... 勘でいじくってみた。
using System.Data;
using System.Data.SqlClient;
{
string url = @"Server=.\SQLEXPRESS;database=;uid=;pwd=";
SqlConnection db = new SqlConnection(url);
db.Open();
SqlTransaction tx = db.BeginTransaction(IsolationLevel.Serializable);
string sql = @"INSERT INTO tblTEST(text1,text2)"
+ " OUTPUT INSERTED.id"
+ " VALUES (@text1,@text2);"
SqlCommand cmd = new SqlCommand(sql, db, tx);
cmd.Parameters.Add("@text1", SqlDbType.VarChar, 10).Value = "text1";
cmd.Parameters.Add("@text2", SqlDbType.VarChar, 10).Value = "text2";
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet dataSet = new DataSet();
adapter.SelectCommand = cmd;
adapter.Fill(dataSet);
int newId = (int)dataSet.Tables[0].Rows[0][0];
tx.Commit();
db.Close();
}
これでも動いた。
SELECT の結果の受け方が分かりづらいね C#.NET は。 発行されるSQLが1回で済む後述の方が正解なんだろう。
先は長そう...
まだ .NET でも無かったし。 と言うわけで納期は目の前にもかかわらず C#.NET で SQL の使い方とか基本的なとこからお勉強。
間に合うのかね ┐(´ー`)┌ とりあえずテーブルに挿入して自動採番された ID を取得するとこまでググって整理してみた。
けど C#.NET 用のサンプルが見当たらない... 勘でいじくってみた。
SELECT の結果の受け方が分かりづらいね C#.NET は。 発行されるSQLが1回で済む後述の方が正解なんだろう。
先は長そう...
この投稿へのコメント

コメント・フォーム