1

我有一个程序,它会在每晚自动运行、运行查询并通过电子邮件发送结果。在我的程序中,我正在调用一个函数作为查询的一部分......我想要传递程序运行的日期作为参数。(@startdate 和 @enddate)@startdate 将始终是 00:00:00 的“今天”日期,而 enddate 将始终是 23:59:59 的“今天”日期。举个例子。如果该程序在今晚运行,它将通过 1/31/13 作为日期。明天,它将通过 2/1/13 作为日期,下一个日期 2/2/13 等。如果我可以在查询级别执行此操作,那也很好......下面是我的代码:

SELECT
  SUM(QTY) AS Discounts
FROM
  dbo.fFinancialDataFull('Date Range Report', @startdate , @enddate, '1', '1', 'ALL', 'ALL', 'ALL', 'ALL', '1', '1', '1', '1', '1') AS fFinancialDataFull_1
WHERE
  (ReportCategoryID = 62)) AS unlimitedtbl
4

3 回答 3

3

//这些是日期变量..如果你需要它们单独

Dim TodayDt As DateTime = DateTime.Today
Dim Tomorrow As DateTime = DateTime.Today.AddDays(1)
Dim TodayEnd as DateTime
TodayEnd = Tomorrow.AddSeconds(-1)

//这是在SQL Server中执行的SQL命令

  SELECT
  SUM(QTY) AS Discounts
FROM
  dbo.fFinancialDataFull('Date Range Report', startdate , enddate, '1', '1', 'ALL', 'ALL', 'ALL', 'ALL', '1', '1', '1', '1', '1') AS fFinancialDataFull_1
WHERE ReportCategoryID = 62
 AND startdate = TodayDt
 AND enddate = TodayEnd AS unlimitedtbl

//这是你需要编写的函数,以使相同的 SQL 在 VB 上运行

Public Function GetValueByDates() As String
    Dim TodayDt As DateTime = DateTime.Today
    Dim Tomorrow As DateTime = DateTime.Today.AddDays(1)
    Dim TodayEnd as DateTime
    TodayEnd = Tomorrow.AddSeconds(-1)
    Dim ReportCategoryID = 62

    Dim sql As String = "       SELECT
      SUM(QTY) AS Discounts
    FROM
      dbo.fFinancialDataFull('Date Range Report', startdate , enddate, '1', '1', 'ALL', 'ALL', 'ALL', 'ALL', '1', '1', '1', '1', '1') AS fFinancialDataFull_1
    WHERE ReportCategoryID = @ReportCategoryID
     AND startdate = @TodayDt
     AND enddate = @TodayEnd AS unlimitedtbl"

    Using cn As New SqlConnection("Your connection string here"), _
        cmd As New SqlCommand(sql, cn)

        cmd.Parameters.Add("@TodayDt", SqlDbTypes.DateTime).Value = TodayDt
        cmd.Parameters.Add("@TodayEnd", SqlDbTypes.DateTime).Value = TodayEnd
        cmd.Parameters.Add("@ReportCategoryID", SqlDbTypes.int).Value = ReportCategoryID 
     Return cmd.ExecuteScalar().ToString()
    End Using
End Function
于 2013-01-31T13:00:56.553 回答
0

要在 VB.Net 代码中调用此函数,应将函数调用放在存储过程中,并从 VB.NET 调用此过程,传递参数如下:

 Dim sqlcmd As New SqlClient.SqlCommand()
 sqlcmd.CommandType = CommandType.StoredProcedure
 sqlcmd.CommandText = "PROCEDURE_NAME"
 sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@startdate", DateTime.Now.Date))
 sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@enddate", DateTime.Now.Date.AddDays(1).AddSeconds(-1)));
 Dim obj As Object = sqlcmd.ExecuteScalar()

如果您无法创建存储过程,则可以在查询级别执行:

declare @startdate datetime
declare @enddate datetime

set @startdate = cast(floor(cast(getdate() as float))as datetime) -- truncate the time part
set @enddate = dateadd(S, -1, dateadd(d, 1, @startdate)) -- add 1 day, subtract 1 minute from today
于 2013-01-31T12:34:34.483 回答
0

试试这个 :

Dim StartDate as string = DateTime.Today.ToString("yyyy/MM/dd") & " 00:00:00"
Dim EndDate as string = DateTime.Today.ToString("yyyy/MM/dd") & " 23:59:59"

我不知道您使用的是什么数据库服务器。如果不起作用,请尝试不同的日期格式,例如DateTime.Today.ToString("yyyy-MM-dd")

于 2013-01-31T12:36:37.753 回答