【发布时间】: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