我遇到了使用VB.net修改存儲過程變量的問題。我已經發現,使得它看起來像一個簡單的解決方案.AddWithValue
的話題很多帖子,但我一直在結束了與以下異常:使用VB.net更改存儲參數
的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。其次,我不是SPROC接受@dcs參數,你確實聲明它,但是它不同於調用時接受參數的SPROC – 2015-02-23 20:46:06
您還在代碼中添加了一個參數,但是沒有參數你的程序。 – 2015-02-23 20:49:01
你可能也想看看這篇文章。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ – 2015-02-23 20:49:33