プロが教える店舗&オフィスのセキュリティ対策術

VB2005 Express Editionを使用しています。レコードの追加を以下のように行っておりますが、追加されません。プログラミングの世界に入ったばかりでどこが違うのか全く分かりません。ご教授ください。また、参考になるサイトがあれば教えてください。

Dim Cn As New SqlConnection
Cn.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename" &
"=|DataDirectory|\Database1.mdf;Integrated Security=True;" &
"User Instance=True"

Dim cmd As New SqlCommand
cmd.Connection = Cn
cmd.CommandText = "INSERT INTO USER_ID (ユーザー名, パスワード) VALUES ('AAA', 'XXX')"

Cn.Open()
cmd.ExecuteNonQuery()
Cn.Close()

A 回答 (4件)

>Database1.mdfとformが同じ階層にあります。


そうですか、しまった。ASP.NETではなくて、Windowsアプリだったですね。すみません。
Windowsアプリの場合、開発環境で実行すると、一旦モジュールがコンパイルされて、bin/Debugというフォルダに入ります。
そのときにデータベースのmdfファイルもそこにコピーされます。
|DataDirectory|で指定されるフォルダがbin/Debugになっているので、実際には更新は正常に行われていて、bin/Debugの下にあるコピーされた方のmdfファイルに更新がかかっている、ということですね。
(Windowsアプリ開発では基本だったかもしれませんが、私もあまりやらないので、気づきませんでした)。
とりあえず、bin/Debugのフォルダのmdfをチェックしてみてください。
    • good
    • 0
この回答へのお礼

jamshid6さん確認が遅れ申し訳ありません。
まだ、bin/Debugのフォルダのmdfの確認は行っていませんが、大変参考になりました。今回の事例はやっぱり基本的なことなのでしょうか?(開発を行う者にとっては当然のことなのでしょうか?)
また、上記のような事はどのようにして学べばよいのでしょうか?仕事はサービス業を行っていますので、周囲に詳しい方もいないので相談が出来ない状況です。

お礼日時:2008/08/31 20:55

>今回の事例はやっぱり基本的なことなのでしょうか?(開発を行う者にとっては当然のことなのでしょうか?)


おそらく、.NETでWindowsアプリを開発する人には基本的なことでしょうね。でも、焦ることはないと思います。私もアプリ開発は専門ではなくて、普段はASP.NET(Web)の方でしか書かないから最初気付かなかったわけですからね。
質問者さんがSQL Serverに投稿されましたので、たまたま私が拾いましたが、プログラミングカテゴリに投稿していれば一発で回答がついたかもしれません。今回の件も、データベースがエラーメッセージなしで更新もされないという事象はありえないという認識のもと、ExecuteNonQueryのところの変数をチェックして気づいたというのが正直なところです。使っていないとわからない、そんなものです。

>また、上記のような事はどのようにして学べばよいのでしょうか?仕事はサービス業を行っていますので、周囲に詳しい方もいないので相談が出来ない状況です。
本業でなく.NETで書かれているとすれば大したものだと思います。
.NETは深く理解しなくても動くものが作れてしまうので、結果的に基本的なことで見落としてしまうことがあるというだけです。
独学で作り始めたのであれば、一通り作れるようになったと思ったところで、データベースを使った基本的なプログラミング解説書を読んでみると、自分が見落としていることがかなり書かれていることに気付くはずです。あとはそういう本やWebに載っているサンプルコードをできるだけ見てみることをお勧めしておきます。王道はありません。頑張ってください。
    • good
    • 0
この回答へのお礼

jamshid6さん有難うございます。
>独学で作り始めたのであれば、一通り作れるようになったと思ったところで、データベースを使った基本的なプログラミング解説書を読んでみると、自分が見落としていることがかなり書かれていることに気付くはずです。あとはそういう本やWebに載っているサンプルコードをできるだけ見てみることをお勧めしておきます。王道はありません。頑張ってください。
やはり、たくさんのサンプルコードを見たりして、知識を深めていく事が大切なんですね。動作が正常に行われるという結果までは多くの記述方法があり、的確に判断しなくてはいけないということが分かりました。大変参考になりました、有難うございます。

お礼日時:2008/09/02 19:49

ソースを見る限りはASP.NETですよね。


実際に試してみましたが、残念ながら何のエラーも返らず、INSERTもされないという状況を作ることができませんでした。
更新されなかった場合はいかなる場合でもエラーが返ります。
(読取専用でも、更新権限がなくても、トリガでロールバックしても、INSERT構文が不正でも)

・書かれたコード以外にエラーを抑え込むような記述(try-catchなど)はありませんよね?
・開発段階(ローカルでデバッグ、実行ができる状態)でもこの事象がおきますか?
・Database1.mdfは項目の追加で「SQLデータベース」を選んで、App_Dataの下に作ったんですよね?
・デバッグしても「cmd.ExecuteNonQuery()」は正常に通りますか?
    • good
    • 0
この回答へのお礼

jamshid6さん有難うございます。実際に試していただいて恐縮です。
>書かれたコード以外にエラーを抑え込むような記述(try-catchなど)はありませんよね?
 他の記述はありません
>開発段階(ローカルでデバッグ、実行ができる状態)でもこの事象がおきますか?
 開発段階でも同様の事象が起きます。
>Database1.mdfは項目の追加で「SQLデータベース」を選んで、App_Dataの下に作ったんですよね?
 Database1.mdfとformが同じ階層にあります。
>デバッグしても「cmd.ExecuteNonQuery()」は正常に通りますか?
 やはり正常に通ります。
jamshid6さんに回答していただいて分かったことは、やはり基本的なことが良く分かっていないと感じました。設定を再度見直してみます。厚かましいとは思いますが、基本的なことを学ぶのに参考となるサイトを教えていただけますか?

お礼日時:2008/08/29 12:18

通常は別の処理順序で書きますよとか、Using句を使った方がとか、USER_IDは予約語ですよとか、いろいろあるにはあるんですが、


とりあえず書かれたコードは動くはずです。
だから、ここに開示されていない理由が原因だと思うのですが。

レコードが追加されません、とありますが、実行してもエラーメッセージも何も返らないのですか?
    • good
    • 0
この回答へのお礼

jamshid6さんご回答いただき有難うございます。
>とりあえず書かれたコードは動くはずです。
 それを聞いて少し安心しました。
>だから、ここに開示されていない理由が原因だと思うのですが。
>レコードが追加されません、とありますが、実行してもエラーメッセージも何も返らないのですか?
 そうなんです、実行してもエラーが返ってこないのでなにが悪いのかわからない状態です。ちなみにSELECT文は実行できています。

お礼日時:2008/08/28 18:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!