- PR -

DataGridクリック後の処理について

1
投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-05-20 19:03
お世話になります。
過去ログ等を色々調べたのですがどうしても不明な点があります。
ご存知の方がいらっしゃればご教授下さい。
(まだ2度目の投稿の為マナー違反等ありましたらご指摘下さい)

VS.NET2003 MSDE2000 で開発をしております。

やりたいことは(初歩的な質問で申し訳ありません)

@フォーム上のDataGridのあるレコードをクリック
A該当レコードの内容が同一フォーム上にあるテキストボックスへ表示

です。
DataGridのMouseUpで該当レコードのindexを取得し、その値(strKbn)を以下のルーチンへ渡すところまではなんとかできました。

/////
Function M_SELECT(ByVal PistrMakPath As String) As Boolean

Dim cn As New SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Dim dr As SqlClient.SqlDataReader

cn.ConnectionString = "Data Source=(local);Initial Catalog=XXXX;" & _
"User ID=sa;Password=9999"
cn.Open()
cmd.Connection = cn
cmd.CommandText = "SELECT Cd FROM mst_Item WHERE Kbn = " + strKbn

dr = cmd.ExecuteReader
(この後に処理・・・)
///


以前、MDBで作成していた(サンプルを拝見させていただきました)ものは
///
Function MDB_M_SELECT(ByVal PistrMakPath As String) As Boolean
Dim strDatbasePara As String 'データベースパラメータ
Dim ObjCnn As New ADODB.Connection
Dim ObjRst As New ADODB.Recordset
Dim strSelectSql As String
strDatbasePara = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
"Data Source= D:\XXXX.mdb;" + _
"Jet OLEDB:Engine Type=5;"
Try

ObjCnn.Open(strDatbasePara)

strSelectSql = "Select Cd from mst_Item" _
+ " where Kbn = " + strKbn

ObjRst.Open(strSelectSql, ObjCnn, _
ADODB.CursorTypeEnum.adOpenKeyset, _
ADODB.LockTypeEnum.adLockOptimistic)

If ObjRst.EOF Then '/レコードがない場合はnullを返す
strCd = "" 'コード
Else '/存在するときは値を返す
strCd = ObjRst.Fields("Cd").Value
End If

ObjRst.Update()
ObjRst.Close()

Catch ex As Exception
End Try

ObjCnn = Nothing
ObjRst = Nothing
///

つまるところMDBからSQLへ変更したところどのようにコードを
変更すればよいのか分からない状態です・・・。

調べるべきポイント等がありましたらご教授下さい。
宜しくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-20 19:36
直接関係ないですが、
引用:

さかもとさんの書き込み (2004-05-20 19:03) より:

cmd.CommandText = "SELECT Cd FROM mst_Item WHERE Kbn = " + strKbn


ここのところ、こうします。

コード:
cmd.CommandText = "SELECT Cd FROM mst_Item WHERE Kbn = @KUBUN"
cmd.Parameters.Add("@KUBUN", strKbn)





 で、本題。

 ExecuteReaderメソッドで、SqlDataReaderは取れていますね。それでは、これは見ました?ここに、
コード:
    While myReader.Read()
        Console.WriteLine(myReader.GetString(1)) ' ちょっと編集
    End While


と書いてあるように、
コード:
While dr.Read()
    strCd = rd.GetString(0)
End While


で読み込めます。が、この場合、必ず1行しか返ってこないですね?しかも、1列目しか取りませんね?それなら、
コード:
strCd = cmd.ExecuteScalar


です。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-05-20 19:53
Jitta 様

ご返信誠にありがとう御座います。
ただ今ご返信頂いたことを頑張って調べているところですが、
ご親切に教えていただきましたことを取り急ぎお礼を申し上げます。

結果の方は改めてご報告させて頂きます。
ありがとうございました。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-05-20 20:35
Jitta 様

先程は本当にありがとうございました。
お陰で実現できました(しかも至って簡素なコードで)
パラメータークエリの書き方までご指南頂いてしまいまして、ありがとうございます。

///
Function M_SELECT(ByVal PistrMakPath As String) As Boolean

Dim cn As New SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Dim dr As SqlClient.SqlDataReader

cn.ConnectionString = "Data Source=(local);Initial Catalog=XXXX;" & _
"User ID=sa;Password=9999"

cn.Open()
cmd.Connection = cn

cmd.CommandText = "SELECT Cd FROM mst_Item WHERE Kbn =@Kbn AND cd=@Cd"
cmd.Parameters.Add("@Kbn", strKbn)
cmd.Parameters.Add("@Cd", strCd)
'★今後はこのように記述します

strCd = cmd.ExecuteScalar '★Jitta様より教えていただいた記述

Console.WriteLine(strCd)

End Function
///

非常に分かりやすくご教授頂きましたことを重ね重ねお礼申し上げます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)