【问题标题】:Fetch Data Between Two Dates in VB.NET from SQL Server by giving multiple parameter like @customerNo, @registraionNo通过提供多个参数,如@customerNo、@registraionNo,从 SQL Server 获取 VB.NET 中两个日期之间的数据
【发布时间】:2022-06-10 20:06:22
【问题描述】:

这是我的 VB.NET 代码

Public Shared Function SearchRoboCallByDate(datefrom As String, dateto As String, customerNo As String, regNo As String, terminalNo As String) As DataSet
        Dim conn As New SqlConnection
        Dim cmd As New SqlCommand
        Dim adapter As New SqlDataAdapter
        Dim ds As New Data.DataSet

        conn = New SqlConnection(ConfigurationManager.ConnectionStrings("SQLConnString").ConnectionString)


        'conn.ConnectionString = ConfigurationManager.ConnectionStrings("SQLConnString").ConnectionString

        adapter.SelectCommand = cmd
        ds.DataSetName = "DataSet"
        cmd.CommandText = "sp_getRoboAlarmDetailByDate"
        cmd.CommandTimeout = 600
        cmd.Connection = conn
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.AddWithValue("@datefrom", datefrom)
        cmd.Parameters.AddWithValue("@dateto", dateto)
        cmd.Parameters.AddWithValue("@customerNo", customerNo)
        cmd.Parameters.AddWithValue("@regNo", regNo)
        cmd.Parameters.AddWithValue("@TerminalNo", terminalNo)
        Try
            adapter.Fill(ds)
        Catch ex As Exception
            ds = Nothing
        End Try

        Return ds
    End Function

下面是我的存储过程

ALTER procedure sp_getRoboAlarmDetailByDate
@datefrom datetime = null ,
@dateto datetime = null ,
@customerNo as nvarchar(60) = null ,
@regNo as nvarchar(60) = null,
@TerminalNo as nvarchar(60) = null 
as
begin 
if(@regNo = '0')
BEGIN
set @regNo = null
end
if(@customerNo = '0')
BEGIN
set @customerNo = null
end
if(@TerminalNo = '0')
BEGIN
set @TerminalNo = null
end

select 
ID = 0 ,  
rda.RCLogID , 
rda.VehicleID  ,
cv.RegistrationNo , 
rda.TerminalNo , 
rda.PollID ,
rda.PacketNo , 
rda.TableNo  ,
rda.ServerID  ,
rda.ServerName ,
rda.isCallSuccessful ,
rda.Remarks ,
rda.CreatedOn, 
c.CustomerID  , 
c.CustomerNo
from 
RoboCalls_DefuseAlarms_Log rda
Left join CustomersVehicles cv on cv.VehicleId = rda.VehicleID 
Left join Customers c on c.CustomerID = cv.CustomerId


where 
rda.CreatedOn between @datefrom  AND @dateto 
and c.CustomerNo = ISNULL(@customerNo, c.CustomerNo)  
and RegistrationNo =  ISNULL(@regNo, cv.RegistrationNo) 
and rda.TerminalNo =  ISNULL(@TerminalNo, rda.TerminalNo)

end

当我选择从和到日期时,数据显示在网格视图中,但是当我选择另一个参数(如 @customerNo@regNo)时,数据网格显示错误:

数据未找到

并且在 VB 代码中没有抛出异常。 并通过为存储过程提供静态值,显示在 sql server 中的数据,但从 VB.NET 代码中提供参数,参数数据从网格中消失

谁能告诉我我在这里做错了什么?

谢谢

【问题讨论】:

  • 存储过程也允许缩进,我建议使用它,因为它会使它的可读性更好
  • 当您在 SSMS 中执行该过程时,您会得到相同的结果吗?
  • 使用AddWithValue时也要非常小心
  • 提示:where rda.CreatedOn between @datefrom AND @dateto@datefrom@dateto 参数在您的存储过程中都是必需的
  • 在 SSMS 中执行该过程我得到相同的结果。

标签: asp.net sql-server vb.net stored-procedures


【解决方案1】:

我刚刚尝试了以下代码

 cmd.CommandText = "Exec sp_GetRoboCallAlarmNotChecked '" & dtStart & "' ,'" & dtEnd & "' , '" & customerNo & "' , '" & regNo & "' ,'" & terminalNo & "', '" & notSuccessCheck & "'"

我的工作已经完成 谢谢

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2013-10-19
    • 2011-01-29
    • 2012-05-01
    相关资源
    最近更新 更多