- ベストアンサー
Insertできません
- Insertできませんどこが間違っているのか教えてください。
- Dim cn As New SqlConnectionでデータベースの接続を行っています。
- cmd.ExecuteNonQuery()でデータの挿入を行っています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
度々失礼。 以下、参考にしてみては如何!? @IT:.NETデータベースプログラミング(ページ真中付近) http://www.atmarkit.co.jp/channel/dbprog/dbprog.html @IT:ASP.net http://www.atmarkit.co.jp/channel/aspnet/aspnet.html 例題があり、且つ詳細に説明してあるのでお勧めかも。 # 頑張って下さいね
その他の回答 (4)
- enzo_taku
- ベストアンサー率47% (9/19)
一応、他に気になった点 1.CommandType ------------------ cmd.CommandType = CommandType.StoredProcedure ------------------ http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatacommandtypeclasstopic.asp によると、「StoredProcedure」ではなく「Text」になります。 (もしくは、「Text」が既定値になっているので、この場合指定しなくともよい) ------------------ cmd.CommandType = CommandType.Text ------------------ 2.SQL文 ------------------ "VALUES (@カラム1, @カラム2, @カラム3,@カラム4())" ------------------ の「@カラム4()」は、「@カラム4」 3.推奨 ------------------ cn.Open() cmd.ExecuteNonQuery() cn.Close() ------------------ にて、データベースOpenしSQL文を発行した際、SQL文法に間違いがある場合、データベースが正常にクローズされない可能性があります。 よって、 ------------------ Try cn.Open() cmd.ExecuteNonQuery() Catch ex As Exception Throw Finally cn.Close() End Try ------------------ としたほうが良いかもしれません。
- enzo_taku
- ベストアンサー率47% (9/19)
SqlCommandコンストラクタ http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqlcommandclassctortopic.asp ↑を参照すると、インスタンスを作成する場合、4つの作成方法がありますよね。 で、phantom_cr さんのソース例では --------- Dim cmd As New System.Data.SqlClient.SqlCommand("カラム1", cn) --------- となっており、4つのインスタンス作成パターン中 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqlcommandclassctortopic3.asp ↑これに該当してますね。 うんで、MSDNの使用例と見比べると... Dim cmd As New System.Data.SqlClient.SqlCommand("カラム1", cn) の第一引数は「"カラム1"」ではなく、実際のSQL文を渡すようになっています。 なので、SQL文を渡すようにするか、もしくは他のインスタンス作成方法にしないといけないですね。 #1つ1つ焦らず順を追えば、おのずと解が導けます
- enzo_taku
- ベストアンサー率47% (9/19)
私もそうでしたが、最初の頃は「MSDNってなんでこんな難解なヘルプなんだろ」なんて常々思っていました。 また「プログラムが苦手」とのことですが、ある程度楽しんで仕事できるようになるといいですね。(苦手な仕事のままだと苦痛ですよ) 「プログラム習得」に関して、自分の場合は実践で他の人のソースを見て覚えていったというとこでしょうか。(あとは書籍など通勤途中に参考、と@ITサイト) 人それぞれ習得の仕方があるので、いろいろと試してみては。 で、本題に関してなんとか解決できました?
- 参考URL:
- http://www.atmarkit.co.jp/
補足
プログラムの習得は英語を習得するより難しいですね>< 解決できません… MSDNの記載に沿って以下のよう書き換えました。 <訂正前> Dim p1 As SqlParameter = cmd.Parameters.Add("@カラム1", SqlDbType.VarChar, 20) p1.Value = TextBox1.Text <訂正後> Dim p1 As SqlParameter = New SqlParameter("@カラム1", SqlDbType.VarChar, 20) p1.Value = TextBox1.Text cmd.Parameters.Add(p1) <-追加 これ以外は上記記載のソース通り このようにして発生するエラーメッセージは ================= 例外の詳細: System.Data.SqlClient.SqlException: ストアド プロシージャ 'カラム1' が見つかりませんでした。 ソース エラー: cmd.Parameters.Add(p4) cn.Open() cmd.ExecuteNonQuery() <- 赤字 cn.Close() ================= です。
- enzo_taku
- ベストアンサー率47% (9/19)
何を参考にソースを組んだのか気になるところですが...(^^; まずは、↓を参照して下さい。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqlparametercollectionclassaddtopic2.asp [引用] cmd.Parameters.Add(p1) [/引用] となっているので、phantom_crさんのソースを見る限り「SqlParameter」を「SqlCommand」へ「Add」してないですよね。 他にも気になる要素はあるけども...、まずは各クラスとクラスのメソッド(プロパティ)をしっかりMSDNにて確認して下さい。 挙動をしっかりとご自身の頭に入れておかないと、深みに嵌ってしまいますよ。(^^;
お礼
回答有難うございます。 いつもこんな感じで深みと言うか泥沼にはまっています^^; プラグラムが苦手なプログラマになってしまったのが間違いだったのでしょうか・・・ それでも習得しないといけないので度々質問しさせていただいているのですがなかなか難しいですね^^ MSDNは参考程度に見てたりもするんですが、わからない部分が多すぎて・・・ 一つ聞きたいのですがenzo_takuさんがどのようにしてプログラムの習得をなさったのかよろしければ教えていただけないんでしょうか? よろしくお願いします。
お礼
度々ありがとうございます。 一つのことに関してこれだけの回答をいただき本当に感謝ておりますありがとうございました。