top / index / prev / next / target / source

2002-08-23 diary: System.Data.SqlClientを直接使ったDB入出力サンプル

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

System.Data.SqlClientを直接使ったDB入出力サンプル

Visual C# + ADO.NET: 低レベルデータベース入出力サンプルを書いてみる。

Visual C# における JavaDocに該当する機能

Visual Studio のメニューの中から ツール(T) → Webページのビルドコメント(B)...

を選ぶと コードコメントWebレポート なるものが生成されます。これが Javaにおける JavaDoc と同じようなものであるようです。ただし どのようにコメントを入れたらよいのかは いまいち把握していません。

コメントを /// のように 3つのスラッシュで開始するんだ、、、とか タグなどはまあ一応 わかっているのですが。

Visual C# + ADO.NET: 低レベルデータベース入出力

Visual C# の ASP.NETプロジェクトとして、aspnetプロジェクトを作成したとします。 http://サーバ名/aspnet/WebFormSimpleDb.aspx

ターゲットはSQLServer 2000 SP2 とします。 WebFormSimpleDb.aspx.cs

                /// <summary>
                /// CREATE TABLE文のサンプル
                /// </summary>
                private void ButtonCreateTable_Click(object sender, System.EventArgs e)
                {
                        System.Data.SqlClient.SqlConnection conn = 
                                new System.Data.SqlClient.SqlConnection(
                                        "server=iga-pc1;database=dbsample;UID=igapyon;PWD=pass");
                        try 
                        {
                                conn.Open();
                                System.Data.SqlClient.SqlCommand cmd = 
                                        new System.Data.SqlClient.SqlCommand(
                                                "CREATE TABLE tblperson (username CHAR(16) NOT NULL, age INT NOT NULL,"
                                                        +" PRIMARY KEY(username))"
                                                ,conn);
                                cmd.ExecuteNonQuery();
                                cmd.Dispose();
                        }
                        catch(System.Data.SqlClient.SqlException ex)
                        {
                                Session["状態"] = "失敗" + ex.ToString();
                                Response.Redirect("WebFormSimpleDbResult.aspx",true);
                        }
                        finally
                        {
                                conn.Close();
                                conn.Dispose();
                        }
                        Session["状態"] = "成功";
                        Response.Redirect("WebFormSimpleDbResult.aspx",true);
                }

                /// <summary>
                /// DROP TABLE文のサンプル
                /// </summary>
                private void ButtonDropTable_Click(object sender, System.EventArgs e)
                {
                        System.Data.SqlClient.SqlConnection conn = 
                                new System.Data.SqlClient.SqlConnection(
                                        "server=iga-pc1;database=dbsample;UID=igapyon;PWD=pass");
                        try 
                        {
                                conn.Open();
                                System.Data.SqlClient.SqlCommand cmd = 
                                        new System.Data.SqlClient.SqlCommand(
                                                "DROP TABLE tblperson"
                                                ,conn);
                                cmd.ExecuteNonQuery();
                                cmd.Dispose();
                        }

                        catch(System.Data.SqlClient.SqlException ex)
                        {
                                Session["状態"] = "失敗" + ex.ToString();
                                Response.Redirect("WebFormSimpleDbResult.aspx",true);
                        }
                        finally
                        {
                                conn.Close();
                                conn.Dispose();
                        }
                        Session["状態"] = "成功";
                        Response.Redirect("WebFormSimpleDbResult.aspx",true);
                }

                /// <summary>
                /// パラメータ無しINSERT文のサンプル
                /// </summary>
                private void ButtonInsert_Click(object sender, System.EventArgs e)
                {
                        System.Data.SqlClient.SqlConnection conn = 
                                new System.Data.SqlClient.SqlConnection(
                                        "server=iga-pc1;database=dbsample;UID=igapyon;PWD=pass");
                        try
                        {
                                conn.Open();
                                System.Data.SqlClient.SqlCommand cmd = 
                                        new System.Data.SqlClient.SqlCommand(
                                                "INSERT INTO tblperson VALUES ('いがぴょん',34)"
                                                ,conn);
                                cmd.ExecuteNonQuery();
                                cmd.Dispose();
                                conn.Dispose();
                        } 
                        catch(System.Data.SqlClient.SqlException ex)
                        {
                                Session["状態"] = "失敗" + ex.ToString();
                                Response.Redirect("WebFormSimpleDbResult.aspx",true);
                        }
                        finally
                        {
                                conn.Close();
                                conn.Dispose();
                        }
                        Session["状態"] = "成功";
                        Response.Redirect("WebFormSimpleDbResult.aspx",true);
                }

                /// <summary>
                /// パラメータ付きINSERT文のサンプル
                /// </summary>
                private void ButtonInsertParam_Click(object sender, System.EventArgs e)
                {
                        System.Data.SqlClient.SqlConnection conn = 
                                new System.Data.SqlClient.SqlConnection(
                                        "server=iga-pc1;database=dbsample;UID=igapyon;PWD=pass");
                        try
                        {
                                conn.Open();
                                System.Data.SqlClient.SqlCommand cmd = 
                                        new System.Data.SqlClient.SqlCommand(
                                                "INSERT INTO tblperson VALUES (@a, @b)"
                                                ,conn);
                                cmd.Parameters.Add(
                                        new System.Data.SqlClient.SqlParameter(
                                                "@a", System.Data.SqlDbType.Char, 16));
                                cmd.Parameters.Add(
                                        new System.Data.SqlClient.SqlParameter(
                                                "@b", System.Data.SqlDbType.Int));
                                cmd.Parameters["@a"].Value = "うんぱあ";
                                cmd.Parameters["@b"].Value = 24;
                                cmd.ExecuteNonQuery();
                                cmd.Dispose();
                                conn.Dispose();
                        } 
                        catch(System.Data.SqlClient.SqlException ex)
                        {
                                Session["状態"] = "失敗" + ex.ToString();
                                Response.Redirect("WebFormSimpleDbResult.aspx",true);
                        }
                        finally
                        {
                                conn.Close();
                                conn.Dispose();
                        }
                        Session["状態"] = "成功";
                        Response.Redirect("WebFormSimpleDbResult.aspx",true);
                }
        }

C# って 例外を捕捉しなくてもコンパイルが通ってしまうのですね。これはJava言語に劣る点の一つです。(超初心者は例外のcatch無しでもコンパイルが通る方が嬉しいでしょうけれども 少しでも熟練してきた場合には、例外捕捉無しでコンパイルが通ってしまうのは生産性向上の妨げになります)または 例によって コンパイラのスイッチ切り替えによって コンパイルエラーになるのかも知れませんが、いずれにしろ これは C#言語の欠点です。

あと コネクションやコマンドをクローズする仕方について まだ調査しきれていません。

ちなみに ソースファイルが ANSI C 風になっていますが、これは Visual Studioの コードエディタが 勝手にインデントした結果です。う~む、JavaのCodeConvに慣れてきたところなので ANSI C 風のインデントが気になってしょうがありません (苦笑)

関連する日記

世間のニュースから () 2002


この日記について