C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[13]: SQL Severへのデータの追加


(過去ログ 21 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■8961 / inTopicNo.1)  SQL Severへのデータの追加
  
□投稿者/ 初心者 (40回)-(2007/10/15(Mon) 16:15:21)

分類:[ASP.NET (VB)] 

ASP.NET (VB) で新規登録画面を作ってます。

データベースはSQL Severを使っているのですが、データを追加することができません。

このプログラムのどこが間違っているのか特定できません。ご助力お願いします。


  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

  Dim strSQL As String
   Dim cnn As SqlConnection = New SqlConnection("Initial Catalog=Data; Data Source=NOTO; Integrated Security=SSPI;")
   cnn.Open()


        Dim execmd As New SqlCommand
        Dim tran As SqlTransaction
        tran = cnn.BeginTransaction()
        execmd.Connection = cnn
        execmd.Transaction = tran

        Try
            strSQL = "INSERT INTO データ(会員コード, 氏名,かな氏名,メールアドレス, パスワード, 生年月日) " & _
                                 "VALUES (" & "'" & yuzaID.Text.Trim & "'," & _
                                              "'" & nameID.Text.Trim & "'," & _
                                              "'" & kanaID.Text.Trim & "'," & _
                                              "'" & mailID.Text.Trim & "'," & _
                                              "'" & passID.Text.Trim & "'," & _
                                              "'" & bornID.Text.Trim & "');"


            execmd.CommandText = strSQL
            execmd.ExecuteNonQuery()
            tran.Commit()
            cnn.Close()

        Catch ex As Exception
            tran.Rollback()
            cnn.Close()
            Exit Sub
        End Try

引用返信 編集キー/
■8969 / inTopicNo.2)  Re[1]: SQL Severへのデータの追加
□投稿者/ はつね (292回)-(2007/10/15(Mon) 18:44:09)
はつね さんの Web サイト
No8961 (初心者 さん) に返信
> データベースはSQL Severを使っているのですが、データを追加することができません。

どのようになってしまい、追加されていないのはどのように確認しましたか?
それを知っているのは、世界ひろしといえども貴方だけです。


引用返信 編集キー/
■8971 / inTopicNo.3)  Re[2]: SQL Severへのデータの追加
□投稿者/ さかもと (7回)-(2007/10/15(Mon) 18:50:07)
さかもと さんの Web サイト
さかもとと申します。

せっかく Catch ex As Exception とすべての例外を拾ってるので、何かしらエラーメッセージが表示されるかと思います。

どのような内容でしょうか?


"'" & bornID.Text.Trim & "');"

最後の「;」が気になります。

引用返信 編集キー/
■8985 / inTopicNo.4)  Re[3]: SQL Severへのデータの追加
□投稿者/ 初心者 (41回)-(2007/10/16(Tue) 00:08:23)
> はつね様&さかもと様

エラーメッセージは全く表示されることはなく、
新規登録画面は入力したときのままの状態です。(入力跡?が残っている状態です)

その後、SQL Severのテーブルを確認しても登録画面で入力したものは入っていませんでした。


ちなみに、ログイン画面は完成しており、手入力したものに関してはログインできましたが、
新規登録画面で入力したものに関してはログインできませんでしたので、データは入っていないと判断しました。




>"'" & bornID.Text.Trim & "');" 最後の「;」が気になります。

最後の「;」に関してはあってもなくても状況は変わらなかったのですが…。





引用返信 編集キー/
■8986 / inTopicNo.5)  Re[4]: SQL Severへのデータの追加
□投稿者/ ビタミンB2 (13回)-(2007/10/16(Tue) 00:13:01)
No8985 (初心者 さん) に返信
> > はつね様&さかもと様
>
> エラーメッセージは全く表示されることはなく、
> 新規登録画面は入力したときのままの状態です。(入力跡?が残っている状態です)

Catchには入ってなかったんですか?まずCatchに入っているかどうかが重要ですよ。
引用返信 編集キー/
■8988 / inTopicNo.6)  Re[5]: SQL Severへのデータの追加
□投稿者/ 初心者 (42回)-(2007/10/16(Tue) 00:28:30)
No8986 (ビタミンB2 さん) に返信

> Catchには入ってなかったんですか?まずCatchに入っているかどうかが重要ですよ。

Catchには入っていると思います。
引用返信 編集キー/
■8989 / inTopicNo.7)  Re[6]: SQL Severへのデータの追加
□投稿者/ ビタミンB2 (15回)-(2007/10/16(Tue) 00:31:55)
No8988 (初心者 さん) に返信
>
> Catchには入っていると思います。

デバックでex.Messageとex.stacktraceを確認。
デバックできない場合はMSGBOXで確認。
何行目でなぜエラーになっているかが重要ですよ。
引用返信 編集キー/
■8990 / inTopicNo.8)  Re[7]: SQL Severへのデータの追加
□投稿者/ 初心者 (43回)-(2007/10/16(Tue) 00:36:47)
No8989 (ビタミンB2 さん) に返信

> デバックでex.Messageとex.stacktraceを確認。

ex.Messageとex.stacktraceはどこで確認することができるのでしょうか?

単純なことを聞いていたらスイマセン。。。
引用返信 編集キー/
■8991 / inTopicNo.9)  Re[8]: SQL Severへのデータの追加
□投稿者/ ビタミンB2 (16回)-(2007/10/16(Tue) 00:41:54)
No8990 (初心者 さん) に返信
> ex.Messageとex.stacktraceはどこで確認することができるのでしょうか?
>
> 単純なことを聞いていたらスイマセン。。。

@デバックモードでF10を押しながらステップ実行
Acatchに入ったら、コマンドウィンドウで「?ex.Message」と入力したら出ますよ〜
※catchに入らなかったら関数の使い方自体は間違ってないです。
引用返信 編集キー/
■8992 / inTopicNo.10)  Re[9]: SQL Severへのデータの追加
□投稿者/ 初心者 (44回)-(2007/10/16(Tue) 00:53:25)
No8991 (ビタミンB2 さん) に返信
>
> @デバックモードでF10を押しながらステップ実行
> Acatchに入ったら、コマンドウィンドウで「?ex.Message」と入力したら出ますよ〜
> ※catchに入らなかったら関数の使い方自体は間違ってないです。

デバックして、F10を押しながらステップ実行(登録ボタンを押す?)ですよね?
やってみます。

ありがとうございます。
引用返信 編集キー/
■8993 / inTopicNo.11)  Re[10]: SQL Severへのデータの追加
□投稿者/ 片桐 (50回)-(2007/10/16(Tue) 01:04:44)
片桐 さんの Web サイト
2007/10/16(Tue) 01:08:42 編集(投稿者)

さらっとコードをよんで気になったところを。

Dim execmd As New SqlCommand
Dim tran As SqlTransaction

のところ、

Dim execmd As New SqlCommand = cnn.CreateCommand
Dim tran As SqlTransaction = cnn.BeginTransaction

みたいに初期化が必要ではないですか?

あと、ASP.NETとのことですので、デバッグ実行できるようになっているかどうかも確認が必要ですね。コードを書いた後、コードの一行目にカーソルを置いてF9キーを押すとブレークポイントがつきますので、その状態でツールバーの緑色の三角(デバッグ)のボタンを押してみてください。デバッグ実行できない場合には「デバッグ実行しますか?」と聞いてきますし、できていればブレークポイントで一時停止してくれますので、そこからステップ実行(一行ずつ実行)してみれば答えもしくはヒントがわかるかも、です。

ちょろっと考えてみたサンプルコード。そのままでは動かないとは思いますけれど、usingや初期化部分についての動きのご参考にどうぞ。

  Dim strSQL As String

using cnn As SqlConnection = New SqlConnection("Initial Catalog=Data; Data Source=NOTO; Integrated Security=SSPI;")
cnn.Open()
Dim tran As SqlTransaction = cnn.BeginTransaction()

using execmd As New SqlCommand = cnn.CreateComannd

Try
strSQL = "INSERT INTO データ(会員コード, 氏名,かな氏名,メールアドレス, パスワード, 生年月日) " & _
"VALUES (" & "'" & yuzaID.Text.Trim & "'," & _
"'" & nameID.Text.Trim & "'," & _
"'" & kanaID.Text.Trim & "'," & _
"'" & mailID.Text.Trim & "'," & _
"'" & passID.Text.Trim & "'," & _
"'" & bornID.Text.Trim & "');"


execmd.CommandText = strSQL
execmd.ExecuteNonQuery()
tran.commit()
Catch ex As Exception
tran.Rollback()
end try

cnn.close()
end using

cnn.close
end using

引用返信 編集キー/
■8994 / inTopicNo.12)  Re[11]: SQL Severへのデータの追加
□投稿者/ はつね (293回)-(2007/10/16(Tue) 01:38:53)
2007/10/17(Wed) 00:29:15 編集(投稿者)

No8993 (片桐 さん) に返信
> さらっとコードをよんで気になったところを。
>
> Dim execmd As New SqlCommand
> Dim tran As SqlTransaction
>
> のところ、
>
> Dim execmd As New SqlCommand = cnn.CreateCommand
> Dim tran As SqlTransaction = cnn.BeginTransaction
>
> みたいに初期化が必要ではないですか?

元コードでもDim文のあとでやっているのでコードの綺麗さは別にして大丈夫な気がします。

VisualStudioで[デバッグ]-[例外]メニューにあるCommon Language Runtime Exceptionsの「スローされるとき」にチェックをいれてからVisualStuido上で実行してみてください。
Tryあってもエラーが発生した行でとまりますから、そこで表示されている内容を投稿してください。

予想:
主キーが同じデータがすでにテーブルに格納されているとか、数字しか入らないところに文字列いれてるとかのエラー

補足:
ちゃんとしたアプリにしたてるのならば、次のような施策が必要。
例えばイントラネットでエラーの詳細がバレても問題ないようであれば、ASP.NETのPageのどこかにLabelコントロールを配置してCatch句の中でRollBackした直後にでもex.Messageをそのコントロールに設定する。
例えばインターネットのようにエラーの詳細がバレたらまずいようであれば、Catch句の中でRollBackした直後にでもThrow exしてglobal.aspxでErrorをキャッチしてWindowsイベントログに書き出すとかログファイルに吐き出すとかするような仕組みを考える。

##不要な引用部分を削除

引用返信 編集キー/
■9014 / inTopicNo.13)  Re[12]: SQL Severへのデータの追加
□投稿者/ 夏椰 (1回)-(2007/10/16(Tue) 14:58:00)
夏椰 さんの Web サイト
ちょっと最初に提示されたコードをWindowsフォームでの実行にしてやってみたところ、データの追加ができるのは確認しました。

皆さんが言っているように「Exceptionの内容」を見ることが第一なのですが、
可能性として「生年月日」の型が「datetime」型なのに変換できない数値が入っているよ〜とか
テーブルの型と入れようとしているデータの型もちゃんと考えないといけないと思います。

それ以前にSQL文中に?パラメータを使用してほしいのですが・・・・。
SQLインジェクションのことを考えると心配になります。

なんにせよ、まずはエラー内容の特定からですね(^^)
そこから解決への道が開けると思うので、がんばってエラーを見てあげてください。
引用返信 編集キー/
■9022 / inTopicNo.14)  Re[13]: SQL Severへのデータの追加
□投稿者/ 初心者 (45回)-(2007/10/16(Tue) 21:07:54)
■上記の皆様に返信

原因がわかりました。 夏椰 さんのおっしゃる通り、SQLの「生年月日」の型が「datetime」型であるために
エラーが発生しているということが判明しました。
なので下記のようにプログラムを変更しました。

誤:bornID.Text.Trim  ⇒  正:CDate(bornID.Text.Trim)

このようにしたら、登録画面で入力したデータがSQL Severにちゃんと入ることができていました。

皆様のアドバイスのおかげです!!
ご助力ありがとうございました(^^)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -