Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用DataReader从mySQL中的多个表中检索数据_Mysql_Sql_Vb.net_Sqldatareader - Fatal编程技术网

使用DataReader从mySQL中的多个表中检索数据

使用DataReader从mySQL中的多个表中检索数据,mysql,sql,vb.net,sqldatareader,Mysql,Sql,Vb.net,Sqldatareader,如何从“每日计算”表中检索数据 Dim SqlQuery As String = "SELECT WEEKLY_TIMECARD.*,DAILY_CALCULATIONS.*,EMPLOYEE_PROFILES.EMPLOYEE_NUMBER " SqlQuery = SqlQuery + " FROM WEEKLY_TIMECARD, DAILY_CALCULATIONS, employee_profiles WHERE employee_profiles.employee_num

如何从“每日计算”表中检索数据

  Dim SqlQuery As String = "SELECT WEEKLY_TIMECARD.*,DAILY_CALCULATIONS.*,EMPLOYEE_PROFILES.EMPLOYEE_NUMBER "
    SqlQuery = SqlQuery + " FROM WEEKLY_TIMECARD, DAILY_CALCULATIONS, employee_profiles WHERE employee_profiles.employee_number"
    SqlQuery = SqlQuery + " = WEEKLY_TIMECARD.employee_number AND EMPLOYEE_PROFILES.EMPLOYEE_NUMBER = DAILY_CALCULATIONS.EMPLOYEE_NUMBER AND"
    SqlQuery = SqlQuery + " WEEKLY_TIMECARD.WEEK_NUMBER = DAILY_CALCULATIONS.WEEK_NUMBER AND WEEKLY_TIMECARD.EMPLOYEE_NUMBER ="
    SqlQuery = SqlQuery + "'" + txtENumber.Text + "' AND WEEKLY_TIMECARD.WEEK_NUMBER = '" + CBWeekNum.SelectedItem + "'"

    Try

        con.Open()

        If con.State = ConnectionState.Open Then
            con.ChangeDatabase("shopclocksoftware")
            Command = New MySqlCommand(SqlQuery, con)
            Data = Command.ExecuteReader()

            While Data.Read
                txtHUnits.Text = Data(2).ToString
                txtOUnits.Text = Data(3).ToString
            End While
我查看了Data.NextResult方法,但无法正确实现,有什么想法吗

Dim SqlQuery As String = "SELECT wtc.A, wtc.B, wtc.C, dc.D, dc.E, ep.F, ep.G"
SqlQuery = SqlQuery + " FROM WEEKLY_TIMECARD wtc, DAILY_CALCULATIONS dc, employee_profiles ep "
SqlQuery = SqlQuery + " WHERE ep.employee_number"
SqlQuery = SqlQuery + " = wtc.employee_number AND ep.EMPLOYEE_NUMBER = dc.EMPLOYEE_NUMBER AND"
SqlQuery = SqlQuery + " wtc.WEEK_NUMBER = dc.WEEK_NUMBER AND wtc.EMPLOYEE_NUMBER ="
SqlQuery = SqlQuery + "@ENumber AND wtc.WEEK_NUMBER = @CBWeekNum"

Try
    con.Open()

    If con.State = ConnectionState.Open Then
        con.ChangeDatabase("shopclocksoftware")
        Command = New MySqlCommand(SqlQuery, con)
        Command.Parameters.AddWithValue("@ENumber", txtENumber.Text);
        Command.Parameters.AddWithValue("@CBWeekNum", CBWeekNum.SelectedItem);

        Data = Command.ExecuteReader()

        Dim aOrdinal As Integer = reader.GetOrdinal("a")
        Dim bOrdinal As Integer = reader.GetOrdinal("b")

        While Data.Read
            txtHUnits.Text = Data.GetString(aOrdinal)
            txtOUnits.Text = Data.GetString(bOrdinal)
        End While
....
Exit Try
需要注意的几点:

  • 我将您的SQL更改为使用别名,并返回显式字段名。使用
    *
    通常是个坏主意,尤其是当您实际上只需要一部分列时
  • 查询现在已参数化,因此您不会受到SQL注入攻击
  • 我使用
    GetOrdinal
    来定位结果集中任何列的位置。这是一个小优化
  • 如果返回的列是字符串,则调用
    GetString
    。否则,您可以像以前一样调用

  • 显然,我现在不知道您的列名,因此SQL无法工作,但您应该了解这一点。

    您没有调用上述方法,那么您的问题到底是什么?您还可能会受到上述代码的SQL注入攻击。您应该参数化SQL以避免这种情况。我不明白您的意思,我的while数据。Read part从我的“WEEKLY_TIMECARD”表返回值。。我还想从“DAILY_CALCULATIONS”调用,我可以看到您有一个查询,它将返回一个包含许多列的结果集
    NextResult
    适用于具有多个选择和多个结果集的场景。您的
    Data.Read
    将返回每一列。那么,如果我从“每周工时卡”4列和“每日计算”7列检索,我的数据(编号)将是什么。。比如说,如果我想从日常计算中检索第三个数据项,它会是(data(7).ToString)吗?