【问题标题】:How can I read a specific column in a database?如何读取数据库中的特定列?
【发布时间】:2017-02-18 04:44:12
【问题描述】:

我有一个名为 DTR_Table 的表,它有 8 列,即: EmployeeID,Date,MorningTime-In,MorningTime-Out,AfternoonTime-In,AfternoonTime-Out,UnderTime,Time-Rendered。我想阅读“AfternoonTime-In”列。 以下是我的代码。它会读取我的“AfternoonTime-In”字段,但即使该列中没有任何内容,它也会继续显示“Has Rows”。

我该如何解决这个问题?

Connect = New SqlConnection(ConnectionString)
Connect.Open()

Dim Query1 As String = "Select  [AfternoonTime-Out] From Table_DTR Where Date = @Date and EmployeeID = @EmpID "
Dim cmd1 As SqlCommand = New SqlCommand(Query1, Connect)
cmd1.Parameters.AddWithValue("@Date", DTRform.datetoday.Text)
cmd1.Parameters.AddWithValue("@EmpID", DTRform.DTRempID.Text)

Using Reader As SqlDataReader = cmd1.ExecuteReader()
    If Reader.HasRows Then
        MsgBox("Has rows")
        Reader.Close()

    Else
        MsgBox("empty")
    End If
End Using`

【问题讨论】:

  • Can we stop using AddWithValue() already? - 您应该在参数中传递一个 DateTime,并且数据库列 [Date] 应该是 DateTime 类型(或类似,not 文本)。
  • 我从 Form 中的标签中获取了 @Date 的值。我真的不明白怎么了。
  • 您是否查看了返回的行,看看您是否可以看到为什么它返回了您不期望的结果?
  • 是的。 AfternoonTime-In 上没有数据。顺便说一句,我已经更新了我的问题。

标签: vb.net tsql


【解决方案1】:

返回 DataReader 后,如果您想从查询中提取值,则需要开始读取它。

Dim dt = Convert.ToDateTime(DTRform.datetoday.Text)
Dim id = Convert.ToInt32(DTRform.DTRempID.Text)

Using Connect = New SqlConnection(ConnectionString)
    Connect.Open()
    Dim Query1 As String = "Select  [AfternoonTime-Out] From Table_DTR 
                           Where Date = @Date and EmployeeID = @EmpID"
    Dim cmd1 As SqlCommand = New SqlCommand(Query1, Connect)
    cmd1.Parameters.Add("@Date", SqlDbType.DateTime).Value = dt
    cmd1.Parameters.Add("@EmpID", SqlDbType.Int).Value = id
    Using Reader As SqlDataReader = cmd1.ExecuteReader()
       While Reader.Read()
          MessageBox.Show(Reader("AfternoonTime-Out").ToString())
       Loop
    End Using
End Using

请注意,我已将 AddWithValue 更改为更精确的 Add,指定参数类型。否则,您的代码将受数据库引擎决定用于将传递给 AddWithValue 的字符串转换为 DateTime 的任何转换规则的控制。
这种转换产生无效值是很常见的,尤其是日期

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多