- - PR -
VB.NET SQL の検索結果をテキストボックスに表示したい
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-14 17:50
こんにちは。
まず最初に誤っておきます。たぶん余計なお世話かもしれません。申し訳ない。
ここで「理解できない」→「右から左へ」になってしまうと、せっかくじゃんぬねっとさんが示 してくれたチャンスを見逃していることになってしまいます。 どこがチャンスなのかも不明だったということもあるかと思いますが。 理解できないことは検索して調べてみるとか、そのままじゃんぬさんに聞いてみるとか(あ まりにオウム返しだと嫌われるかもしれませんが)方法はありますから、次はもう少しがん ばってみてください。
「実際にはこういうフィールドは無い」のを知っているのは nari さんだけですよね。 我々はそういった事情はわからないので「 Modefy ってなんだよ、Modify じゃねーの? それに tanto ってローマ字と間違った英単語チャンポンかよ、見直そうぜ。な!」という 感じでぶさいくろうさんが老婆心ながら指摘してくださったのだと思います。いや、セリフの 前半部分は私の妄想ですが。 今回のプログラムが動くようになってからでも結構ですので、ご自分でも理解されているよ うに少しずつでも勉強していくのがよろしいかと思います。 がんばってください。 # ただ、自分のチームで「チーム内だけだから動けばいい」と言う人間がいたらちょっと考 # えてしまいそうです _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2006-07-25 16:09
お久しぶりです。nariです。
先日教えていただいたことを復習のつもりで、 以下のようなコードを書いてみましたところ、 意図しない動作になってしまい、困惑しています。 どこか、理解に不足があるのかと思い、スレッドを見直してみたのですが、 問題なさそうなのです。。 少々アドバイス頂けますと幸いです。 #ちなみに、サンプルプログラムです。 ■環境 Windows Server 2003 + VB.NET (VS2005 Web Exp)←WebMatrixから移行しました。 SQL Server 2000 SP4a ■DB ID:Char(10) title:char(10) Registration_day:datetime person:char(10) Registration_day と person は Null を許容しています。 ■想定した動作 (DBの登録されたデータが Null でなければ、) HTML上の対応するテキストボックスに結果が表示される。 ()内は、まだ解消できていませんが、その点は別スレッドで質問します。 ■実際の動作 「読み取りに失敗しました」が表示される。 ■試行錯誤の結果 以下のIf文で、False に流されているようなので、この If 文のセットを削除したところ、上記の、「想定した動作」をしました。 If rdr_srch.Read = True Then SQLのプロファイラで見ると、ちゃんとアクセスしているようです。 どこか、指定方法がおかしいなど、ありますでしょうか。 よろしくお願いします。 ====コード==== Sub search_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Len(ID.Text) = 0 Then title.Text = "IDを入力してください" Else Dim cn_srch As New SqlConnection() cn_srch.ConnectionString = "data source=localhost;Initial Catalog=logs;Trusted_Connection=False;User ID=sa;Password=password" Dim cmd_srch As New SqlCommand() cmd_srch.CommandText = "select title,person,Registration_day from test2 where ID=@ID" cmd_srch.Connection = cn_srch Dim ID2 As SqlParameter = cmd_srch.Parameters.Add("@ID", System.Data.SqlDbType.VarChar, 10) ID2.Value = ID.Text cn_srch.Open() Dim rdr_srch As SqlDataReader = cmd_srch.ExecuteReader rdr_srch.Read() If rdr_srch.Read = True Then If rdr_srch.HasRows = True Then title.Text = rdr_srch("title") If IsDBNull(rdr_srch("person").value) Then person.Text = "" End If person.Text = rdr_srch("person") If IsDBNull(rdr_srch("Registration_day").value) Then Registration_day.Text = "" Else Registration_day.Text = rdr_srch("Registration_day") End If Else title.Text = "データがありません" End If End If title.Text = "読み取りに失敗しました" rdr_srch.Close() cn_srch.Close() End If End Sub | ||||||||
|
投稿日時: 2006-07-25 18:37
こんにちは、でっちです。
えーと、なんでそっちを消しちゃうんでしょう。 1つ消したらOKになったことからも、明らかにReadメソッドを2回呼んでるのが原因だと思われますが?
最初のReadメソッドで1レコード目に進むので、Ifの中では2レコード目に進んでしまいますよ。 先に書いてあるrdr_srch.Read()を消せば、「想定した動作」になります。 | ||||||||
|
投稿日時: 2006-07-25 19:12
前レスで、「戻り値を見るように」 と書かせて頂きましたが、言葉足らずだったかもしれませんね。
しかしながら、当たり前ですが、戻り値を受け取ろうと受けとらなかろうと、 呼び出しているメソッドは同じなのですから、動作は変わりようがありません。 2 回呼ぶというのが例外の (というより、例外が起こらなくとも動作がおかしくなる) 原因だったわけですが、 これは、リファレンスを読んで 何をするメソッド なのかを理解していれば、防げたことだと思います。 SqlDataReader.Read メソッド # コード例もあります。 なぜ、2 回呼び出すと想定していた動作と食い違ってくるのか、理解できるかと思います。 このように、理解 (学習) できる機会を棒に振るのは勿体無いと思いますよ。 ぽぴ王子さんと被ってしまう言い方ですが、もう少しがんばってみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-07-26 09:39
でっち6号さん、じゃんぬねっとさん
ご指導ありがとうございます。 確かに、Readを2度呼んでいることが問題だということが分かりました! なぜか、 rdr_srch.read() で呼んでから、 if rdr_srch.read = true と、確認するものだと思い込んでいました。。 確かにクラスライブラリ確認すると、次のレコードを呼び出します、て記載あるじゃん。。。それじゃ、False返りますね・・。 クラスライブラリは勉強中ですが、 いまだ、どこに何があるのかきちんと理解できているとはいい難いみたいです。 #(せっかく動作確認しようと思ったら、開発環境壊れました・・・。マシンが立ち上がらない上に、VM Serverなので・・・データの取り出しができるかどうか・・・(T_T)) |
«前のページへ
1|2|3