.net 值不能为null,参数名称:dataTable

.net 值不能为null,参数名称:dataTable,.net,sql-server,vb.net,.net,Sql Server,Vb.net,我正在使用SQL数据库,并从VB.Net调用一个存储过程,然而,当我尝试并将我的DataTable转换为数据库时,我得到的错误与标题一致 我的代码是: Dim dt As DataTable Using sqlConn As New SqlConnection(_connstr) Dim sqlcmd As New SqlCommand() Dim dateParam = sqlcmd.Parameters.Add("@reportDate", SqlDbType.Date)

我正在使用SQL数据库,并从VB.Net调用一个存储过程,然而,当我尝试并将我的DataTable转换为数据库时,我得到的错误与标题一致

我的代码是:

Dim dt As DataTable
Using sqlConn As New SqlConnection(_connstr)
    Dim sqlcmd As New SqlCommand()
    Dim dateParam = sqlcmd.Parameters.Add("@reportDate", SqlDbType.Date)
    Dim dateParam2 = sqlcmd.Parameters.Add("@reportDateEndRange", SqlDbType.Date)
    'Dim reportType = sqlcmd.Parameters.Add("@reportType", SqlDbType.VarChar)
    Dim companyId = sqlcmd.Parameters.Add("@companyID", SqlDbType.Int)
    dateParam.Value = DateTime.Now.AddDays(-1)
    dateParam2.Value = DateTime.Today
    'reportType.Value = "'IRF', 'TRF'"
    companyId.Value = 1

    sqlcmd.Connection = sqlConn
    sqlcmd.CommandType = CommandType.StoredProcedure
    sqlcmd.CommandText = "dbo.uspSearchRequest"

    Using sqlda As New SqlDataAdapter(sqlcmd)
        sqlda.Fill(dt)
    End Using
End Using
但是,当我到达行
sqlda.Fill(dt)
时,我得到的错误与平铺一致

我已经在存储过程中测试了这些参数,并得到了结果

有没有办法阻止这一切

========================================编辑1

ALTER procedure [dbo].[uspSearchRequest]
@reportDate date,
@reportDateEndRange date,
@companyID int

as
begin

select 
null as [Report Manager],
null as [Report Detail],
null as [Form],
null as [Attachment],
req.OverallStatus as [Result],
req.ReportNumber as [Report Number],
req.ReportDate as [Report Date],
req.FormNumber  as [Form Number],
req.SubmittedTimestamp as [Submit Date],
req.ApplicantContactPerson  as [Applicant] ,
req.Brand  as [Brand],
req.Department  as [Department]
from ias.dbo.request req
where req.ReportDate  between @reportDate and @reportDateEndRange 
and req.RequestCompanyID = @companyID
end 
go

您必须首先初始化数据表:

Dim dt As DataTable = New DataTable()

很可能
dt
为空(无)。我们不知道您在哪里创建datatable…我的猜测是存储过程需要一些您没有指定的其他值,所以默认值是否为null,而数据库不允许?您可以同时显示存储过程的签名吗?在sqlda.Fill(dt)中放置一个断点,并检查dt=Nothing是否在using语句之前创建了DataTable,我将编辑问题以反映出来,现在我已使用存储的过程进行了更新。我已经设置了一个断点,是的,dt=nothingNo,DataTable是在使用之前声明的。声明和创建实例是两件不同的事情