前提・実現したいこと
Insert時にIDというフィールドへ現在のIDの最大値+1を設定したい。
発生している問題・エラーメッセージ
登録時にユーザー毎に取れているMAX(ID)が異なっているためか順番通りに登録されていない。
該当のソースコード(登録部分のみ抜粋して記載します。)
C#
1protected void RegistButton_Click(object sender, EventArgs e) 2{ 3 try 4 { 5 using (OleDbConnection cn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString)) 6 { 7 OleDbCommand cmd = new OleDbCommand(); 8 OleDbTransaction trn = null; 9 OleDbDataReader dr = null; 10 11 try 12 { 13 cn.Open(); 14 trn = cn.BeginTransaction(); 15 16 cmd.Connection = cn; 17 cmd.Transaction = trn; 18 19 cmd.CommandText = "SELECT MAX(ID) + 1 FROM TABLE1"; 20 dr = cmd.ExecuteReader(); 21 22 string strMaxID; 23 dr.Read(); 24 if (dr[0].ToString() != "") 25 { 26 strMaxID = dr[0].ToString(); 27 } 28 else 29 { 30 strMaxID = "19000001"; 31 } 32 33 dr.Close(); 34 35 string strCmd = "INSERT INTO TABLE1(ID, Column1, Column2) "; 36 strCmd += "VALUES(" + strMaxID + ", 'カラム1', 'カラム2'); 37 38 cmd.CommandText = strCmd; 39 cmd.ExecuteNonQuery(); 40 trn.Commit(); 41 42 ClientScript.RegisterStartupScript(this.GetType(), "registmessage", "<script type='text/javascript'>alert('登録しました。'); location.href=location.href;</script>"); 43 } 44 catch (Exception ex) 45 { 46 string strErrMsg = "登録に失敗しました。\n" + ex.Message.Replace("\"", "'").Replace("\r\n", "\n"); 47 ClientScript.RegisterStartupScript(this.GetType(), "errormessage", "<script type='text/javascript'>alert('" + strErrMsg + "');</script>"); 48 trn.Rollback(); 49 } 50 } 51 } 52 catch (Exception ex) 53 { 54 string strErrMsg = "登録に失敗しました。\n" + ex.Message.Replace("\"", "'").Replace("\r\n", "\n"); 55 ClientScript.RegisterStartupScript(this.GetType(), "errormessage", "<script type='text/javascript'>alert('" + strErrMsg + "');</script>"); 56 } 57}
試したこと
MySQLでは出来たという記憶があったのでOracleにてInsertと同時に SELECT MAX(ID) + 1 FROM TABLE1 が出来ないか調査しましたがOracleでは出来ないようでした。
なお、IDは管理者が変更したい要望がある為、シーケンスを使用することは出来ません。
補足情報(FW/ツールのバージョンなど)
開発環境は以下のようになります。
Oracle: Oracle 11g
サーバーOS:Windows Server 2012
クライアントOS:Windows7
.NET:4.0
サーバーIIS:8.0
クライアントIIS:10.0 Express
Visual Studio:2015 Community
回答1件
あなたの回答
tips
プレビュー