如何从vb.net传递参数

时间:2013-01-31 12:19:38

标签: sql vb.net parameters stored-functions

我有一个程序,每晚会自动运行,运行查询和电子邮件结果。在我的程序中,我调用函数作为查询的一部分...我想要的是将程序运行的日期作为参数传递。 (@startdate和@enddate)@startdate将始终是00:00:00的“今天”日期,而结束日期将始终是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

3 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分: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

答案 2 :(得分: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")