【发布时间】:2015-02-23 20:33:28
【问题描述】:
我在使用 VB.net 修改存储过程变量时遇到问题。我发现了很多关于这个主题的帖子,使它看起来像是一个简单的.AddWithValue 解决方案,但我一直以以下异常结束:
IListSource 不包含任何数据源。
存储过程是一个动态数据透视表,可以很好地使用@dcs 的静态值
CREATE PROCEDURE [dbo].[dcspull]
as
DECLARE @cols AS NVARCHAR(MAX),
@colsNull AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@dcs AS INT
select @cols = STUFF((SELECT ',' + QUOTENAME(FirstName)
FROM[Training Data]
WHERE DataCenterID = @dcs
GROUP by FirstName
ORDER by FirstName
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
select @colsNull = STUFF((SELECT ', coalesce(' + QUOTENAME(FirstName)+''''')
AS '+QUOTENAME(+FirstName)
FROM [Training Data]
WHERE DataCenterID = @dcs
GROUP by FirstName
ORDER by FirstName
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
set @query = 'SELECT Topic, ' + @colsNull + '
FROM
(SELECT FirstName, Topic, Level
FROM [Training Data]) x
PIVOT
(MAX(Level)
FOR FirstName IN (' + @cols + ')) p'
execute(@query)
我试图通过 VB.Net 更改的唯一值是 @dcs。当@dcs 被静态设置时,Gridview 会按预期填充,但是一旦我尝试将值传递给参数,它就会中断。
Dim SQLCon As String = ConfigurationManager.ConnectionStrings("tCString").ToString
Dim DBConnSQL As New SqlConnection(SQLCon)
Dim da As New SqlDataAdapter
Dim ds As New DataSet
DBConnSQL.Open()
Dim dbcheckone As New SqlCommand("dcspull", DBConnSQL)
dbcheckone.parameters.addwithvalue("@dcs", Convert.ToInt64(DropDownList1.Text))
da.SelectCommand = dbcheckone
da.Fill(ds)
GridView1.DataSource = ds
GridView1.DataBind()
我对存储过程还很陌生,我认为这是我对这种关系的不理解。
【问题讨论】:
-
第一个问题是我没有看到您的 SqlCommand 被设置为存储过程的 CommandType。其次,我不接受 @dcs 参数的 SPROC,您确实声明了它,但这与调用时接受参数的 SPROC 不同
-
您还在代码中添加了一个参数,但您的过程中没有参数。
-
您可能还想看看这篇文章。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
-
感谢提示,我没有意识到“声明”不是程序。正如我所说,存储过程的新手。
标签: asp.net vb.net stored-procedures