วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2551

การใช้ Parameter คู่กับ Dataset จะเขียนยังไงดีครับ

การใช้ Parameter คู่กับ Dataset จะเขียนยังไงดีครับ

คือ ปรกติผมใช้ parameter กับ พวก .ExecuteNonquery หรือไม่ก็ .ExecuteReader น่ะครับ แต่ทีนี้ว่ามีปัญหาคือ
Function ในการ Query ข้อมูลนั้น เป็นการ return ค่าออกมาเป็น Dataset ซึ่งผมไม่รู้ว่าจะวาง parameter ยังไงให้ ตรง query Dataset รู้จักค่า Parameter ด้วย
ยกตัวอย่างการเขียนนะครับ
Dim dr As SqlDataReader

Try

checkOpen() << เกี่ยวกับเปิดปิดการ Connect

Dim sql As String = " select * From MyTable Where id = @id And Name Like @Name "

Dim cmd As New SqlCommand(sql, cn)

cmd.Parameters.Add("@id", SqlDbType.DateTime).Value = sdate

cmd.Parameters.Add("@Name", SqlDbType.DateTime).Value = edate

dr = cmd.ExecuteReader

dr.Read()

If dr.HasRows = True Then

cmd.Dispose()

dr.Close()

Dim da As New SqlDataAdapter(sql, cn)

Dim ds As New DataSet

da.Fill(ds, "Test")

da.Dispose()

Return ds <<< คืนค่าออกไป

Else

cmd.Dispose()

dr.Close()

End If

Catch ex As Exception

MsgBox(ex.Message & " จาก Function Test, TestClass")

Finally

cn.Dispose()

End Try

คือ ถ้าเขียนแบบนี้ ตัว SqlDataAdapter มันจะไม่รู้จัก ตัว Parameter น่ะครับ

ไม่ทราบว่ามันสามารถเขียนได้หรือไม่ครับ

ขอบคุณมากครับ
MrSuthin วันที่ส่ง: 3 ม.ค. 50 18:43 GMT+7 วันที่ปรับล่าสุด: 3 ม.ค. 50 19:50 GMT+7
REPLY #1 (32444)
คุณ MrSuthin ยังใช้วิธีการเขียนแบบ Visual Studio 2003 (.NET 1.1) อยู่นะครับ
ยังไม่ใช้ .NET 2 หรือครับ
ใน DataAdapter จะมีอ๊อบเจ็กต์ Command ของมันเองอยู่สี่ตัว
กรณีนี้เรากำลังจะสนใจเฉพาะ SelectCommand ผมแนะนำโค้ดให้นิดหน่อย
คุณสุทินก็คงเขียนต่อเองได้แล้วมั้งครับ
Dim sql As String = "SELECT ... WHERE col1 = @para1;"
Dim ds As New DataSet
' ...
Using da As New SqlDataAdapter(sql, cn)
Dim cmd As SqlCommand = da.SelectCommand
cmd.Parameters.Add("@para1", SqlDbType.XYZ).Value = yourValue
' ---- เมื่อเราสั่ง Fill, DataAdapter จะเอา SelectCommand ของมันไป ExecuteReader
' ---- เพื่อนำข้อมูลที่ได้จาก DataReader มา "Fill" ใส่ DataSet/DataTable ที่เรากำหนด
da.Fill(ds, "Table1")
End Using
' ...
Return(ds)

surrealist

ขอขอบคุณ อาจารย์ครับ

ไม่มีความคิดเห็น: