首页 文章

VB.Net SQL存储过程缓存/参数计数值?

提问于
浏览
0

我对Web开发很陌生,所以这个(希望)可能有一个简单的答案 .

基本上,我有一个最初采用两个参数的存储过程 . 我把它改成只需要一个 . 现在我从VB.Net发送请求以使用所需的一个参数的过程 .

参数计数与参数值计数不匹配 .

所以我将旧的第二个参数添加回请求,即使它不再是实际存储过程的一部分 .

过程或函数xw_GetProducts_by_Brand指定了太多参数 .

所以我再次在SQL中声明旧参数,即使查询不使用它 . 从VB.Net发送两个参数

过程或函数'xw_GetProducts_by_Brand'需要参数'@AccountNo',它未提供 .

最后,我留下了在SQL中声明的两个参数(String / nvarchar和Int),但是从VB.Net中删除了不需要的int,以防万一 .

参数计数与参数值计数不匹配 .

所以...我有一个工作正常的查询,直到我删除了未使用的int参数,现在无论我使用什么参数设置它都无法工作 . 存储过程(在VB / ASP.Net或SQL Server中)是否存在缓存时间,这会使我的页面搞砸?

我不认为实际的查询本身是一个问题,因为一切都有效,直到我从声明中删除行 @AccountNo int .

VB.Net

Dim data1 As DataTable = SqlHelper.ExecuteDataset(
    System.Configuration.ConfigurationManager.AppSettings("dbConn"), 
    "xw_GetStockCodesInBrand", brand.Value
    ).Tables(0)

Dim stockString As String = "'"

For Each row As DataRow In data1.Rows
    stockString += row("StockCode") + "','"
Next

Dim stockStringFinal As String = 
stockString.Substring(0, stockString.Length - 2)

Dim dt As DataTable = SqlHelper.ExecuteDataset(
    System.Configuration.ConfigurationManager.AppSettings("dbConn"), 
    "xw_GetProducts_by_Brand", stockStringFinal
    ).Tables(0)

数据1获取股票代码值的字符串,它们被子字符串修剪并作为DT(数据表)的参数提交 .

第二个 SqlHelper 请求是问题,没有2个参数它没有工作 .

SQL query

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER  PROCEDURE [dbo].[xw_GetProducts_by_Brand3] 
    @ProductID nvarchar(max)
AS
    SELECT 
        stock_items.Stockcode, STOCK_GROUPS.XW_URL as stockgroup,
        STOCK_GROUP2S.XW_URL as stockgroup2, 
        STOCK_MAINGROUP.XW_URL as stockmaingroup, 
        stock_items.Stockcode as pID, stock_items.description as pName, 
        stock_web.sales_html as pdescription, 
        stock_web.picture_url as pImage, 
        stock_web.picture_url as pLargeimage, 
        stock_items.sellprice1 as pPrice, 
        stock_items.SELLPRICE1, stock_items.SELLPRICE2, 
        stock_items.SELLPRICE3, stock_items.SELLPRICE4, 
        stock_items.SELLPRICE5, stock_items.SELLPRICE6, 
        stock_items.SELLPRICE7, stock_items.SELLPRICE8, 
        stock_items.SELLPRICE9, stock_items.status as itemtype, 
        stock_items.SELLPRICE10 as pListPrice, 
        stock_items.x_totalstock as pInStock, 
        stock_items.x_webhits as pHits, 
        stock_items.ISACTIVE, stock_items.WEB_SHOW, 
        stock_items.X_WebBlub as X_WebBlurb, 
        stock_items.x_webpromo as X_PROMOPAGE, 
        stock_items.last_updated as lastupdated, 
        stock_items.x_stockleveloverride, 
        isnull(stock_items.Restricted_item,'N') as Restricted_item 
    FROM 
        stock_items 
    LEFT OUTER JOIN
        STOCK_WEB ON (stock_items.Stockcode = STOCK_WEB.Stockcode) 
    LEFT OUTER JOIN 
        STOCK_GROUPS ON (STOCK_GROUPS.GROUPNO = STOCK_ITEMS.STOCKGROUP)  
    LEFT OUTER JOIN 
        STOCK_GROUP2S ON (STOCK_GROUP2S.GROUPNO = STOCK_ITEMS.STOCKGROUP2) 
    LEFT OUTER JOIN 
        STOCK_MAINGROUP ON (STOCK_MAINGROUP.GROUPNO = STOCK_GROUPS.XW_MAINGROUP)
    WHERE 
        stock_items.ISACTIVE = 'Y'  
        AND stock_web.picture_url IS NOT NULL 
        AND stock_items.Stockcode IN (@ProductID)

Fix

我通过重命名我的存储过程并假装它是一个全新的过程解决了这个问题 . 如果有人知道这个问题背后的实际原因,我仍然希望修复它 .

1 回答

  • 0

    可能当我从SQL过程中删除第二个参数时,你忘记了“,”需要允许下一个(和最后一个)参数 . Chekit它 . 因此,根据您的描述,SQL过程的最后一个参数以“,”结尾 - 这会导致错误 . 把逗号拿下来 .

相关问题