Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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
Sql server SQL Server存储过程不向类返回数据,但在SQL Server Management Studio中工作正常_Sql Server_Vb.net_Visual Studio 2012 - Fatal编程技术网

Sql server SQL Server存储过程不向类返回数据,但在SQL Server Management Studio中工作正常

Sql server SQL Server存储过程不向类返回数据,但在SQL Server Management Studio中工作正常,sql-server,vb.net,visual-studio-2012,Sql Server,Vb.net,Visual Studio 2012,我正在尝试从vb类和类上的SQL Server存储过程检索数据: Dim GetDailySalesAmateurRptOrderItems_DataArray(,) As String = oDAL.GetDailySalesAmateurRptOrderItems("2014-04-17", "2014-04-20") 即使数据库中有足够的数据,它也不会向数组返回任何内容。。。知道是什么导致了这个问题吗 USE [QUICKFIX_COLOR_LAB_POS] GO SET ANSI_N

我正在尝试从vb类和类上的SQL Server存储过程检索数据:

Dim GetDailySalesAmateurRptOrderItems_DataArray(,) As String = 
oDAL.GetDailySalesAmateurRptOrderItems("2014-04-17", "2014-04-20")
即使数据库中有足够的数据,它也不会向数组返回任何内容。。。知道是什么导致了这个问题吗

USE [QUICKFIX_COLOR_LAB_POS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GetDailySalesAmateurRptOrderItems] 
   @FromDate Datetime, @ToDate Datetime
as
   SELECT        
       ITEMS.ItemID, ITEMS.ItemName, ORDER_ITEMSET.Qty, 
       ORDER_ITEMSET.SoldPrice, ORDERS.OrderTimestamp
   FROM            
       ORDERS 
   INNER JOIN
       ORDER_ITEMSET ON ORDERS.OrderID = ORDER_ITEMSET.OrderID 
   INNER JOIN
       CUSTOMER_ACCOUNTS ON ORDERS.CustomerID = CUSTOMER_ACCOUNTS.CUSTOMER_ID 
   CROSS JOIN
       ITEMS
   WHERE        
       (CUSTOMER_ACCOUNTS.CUSTOMER_CATEGORY = 'Amateur') 
       AND (ORDERS.OrderTimestamp BETWEEN CONVERT(DATETIME, @FromDate, 102) AND CONVERT(DATETIME, @ToDate, 102))
   ORDER BY 
       ITEMS.ItemID
VB函数

    Function GetDailySalesAmateurRptOrderItems(DateFrom As String, ByVal DateTo As String)
        Try
            Dim DateFrom_Date As DateTime = DateFrom
            Dim DateTo_Date As DateTime = DateTo
            Dim output(,) As String
            Dim counter As Integer
            Dim cmd As New SqlCommand("GetDailySalesAmateurRptOrderItems", DBconn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.AddWithValue("@FromDate", DateFrom_Date)
            cmd.Parameters.AddWithValue("@ToDate", DateTo_Date)
            Dim reader As SqlDataReader
            DBconn.Open()
            reader = cmd.ExecuteReader
            While reader.Read()
                counter = counter + 1
            End While
            ReDim output(counter - 1, 0 To 4)
            counter = 0
            reader.Close()
            reader = cmd.ExecuteReader
            While reader.Read()
                output(counter, 0) = reader(0)
                output(counter, 1) = reader(1)
                output(counter, 2) = reader(2)
                output(counter, 3) = reader(3)
                output(counter, 4) = reader(4)
                counter = counter + 1
            End While
            DBconn.Close()
            Return output
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function

您是否检查了DateFrom_Date和DateTo_Date的值?另外,我建议您使用SQL Server探查器,这样您就可以准确地看到onexec GetDailysalesameturerPtorderItems@FromDate='2014-04-17 00:00:00'的运行情况,@ToDate='2014-04-20 00:00:00'您是否直接运行查询以准确了解程序应返回的预期结果?我运行了它,下面是您执行查询两次的结果,这不太好。我假设第一次执行查询的目的是获取行数,以便创建数组。相反,创建一个类来表示结果集中的一行,然后使用该类的列表来保存结果。您可以从中返回一个数组。这样可以避免执行查询两次。