人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ネットワーク上のSQLServer2000のデータベースを参照更新をするプログラムの質問です
Public DBcn As SqlClient.SqlConnection
Public SQLcmd As SqlClient.SqlCommand
(関数1)
Dim dr As SqlClient.SqlDataReader
関2
SQLcmd.CommandText = ”select 略”
dr = SQLcmd.ExecuteReader
dr.Read
関3
DBcn.Close

(関数2)
DBcn = New SqlClient.SqlConnection
SQLcmd = New SqlClient.SqlCommand
DBcn.ConnectionString = ”接続情報”
DBcn.Open
SQLcmd.Connection = DBcn

(関数3)
Dim dr As SqlClient.SqlDataReader
SQLcmd.CommandText = ”Insert 略”
dr = SQLcmd.ExecuteReader
dr.Read

?Open、Closeはselect,insertなどをするたびにopen,Closeをするべきですか?
?デバックで、関3のExecuteReader処理後、Readに進まずに関数を抜けてしまいます、なぜ><
→SqlDataReaderは、グローバルにするべき?
?Updateしたいのですが、Select,Insertと同じようにやればできますか?
?SqlDataAdapter,Datasetはどんな時に使うのですか?

●質問者: haul
●カテゴリ:コンピュータ
✍キーワード:as open SELECT グローバル データベース
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ちゃぼりん
●25ポイント

http://www.microsoft.com/japan/msdn/thisweek/catchupASP/catchupA...

エバンジェリスト チーム コラム:Multi Web UI アプリケーション開発への道 第 5 回 ADO.NET 概要

(1)いいえ。Connectionは、1本の処理内できるだけCloseせずに使うべきです。クエリとクエリの間で人間の操作などが入り、時間が経過する場合はCloseすべきです。


(2)普通に考えればこのコードで関数を抜けることはないので、別の理由があると思います。例えば、ON ERRORでエラートラップされていませんか?

(3)はい。正しくは、INSERT,DELETEと同じようにやればできます。SELECTはまた少し違います。

http://www.microsoft.com/japan/msdn/thisweek/meikaiADONET/meikai...

エバンジェリスト チーム コラム : DB 設計者のための明解 ADO.NET 第 1 回

(4)ExecuteReaderとの最大の違いは、接続型か非接続型かにつきます。つまり、DBMSと常にコネクションを貼らなくてもデータの取得・操作ができることが特長です。

◎質問者からの返答

レスありがとうございます。

?、?はわかりました。?はエラートラップぽいのがあったので消したら飛ばなくなりましたが、

下記のような記述で、Selectで値が見つからないとエラーになってしまいます。

どういう風に対処すればよいのでしょうか?

SQLcmd.CommandText = ”select * from cstmMst where memberNum = ’” & GetMemberNum & ”’”

dr = SQLcmd.ExecuteReader()

dr.Read()

If dr.Item(”memberNum”) = Nothing Then

?なのですが調べた結果下記のような文になったのですがあってますか?

SQLcmd.CommandText = ”insert into CstmMst (memNum, amStrNum)”

SQLcmd.ExecuteNonQuery()


2 ● ちゃぼりん
●25ポイント

http://www.hatena.ne.jp/###

はてな

「値が見つからないとエラーになってしまいます」とはどのようなエラーですか?

正しいエラー文字を書いてもらえると助かります。

おそらくEOFなのでしょうが、その時はdr.Itemを呼びに行った時点でEOFエラーが出ていることと思います。もし0件か1件しかレコードがないのであれば、

’--

If dr.Read() = True Then

xxx = dr.Item(”memberNum”)

End If

dr.Close()

’--


このようにして、dr.Readの戻り値がTrueかFalseかで判定します。


もし複数件あるときは、

’--

While dr.Read() = True

dr.Item(?)

End While

’--

として回すのが良いでしょう。


(3)はそれで正解です。

◎質問者からの返答

そうですーデータが見つからなかった場合です。

できました。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ