PDA

View Full Version : نشان دادن گالری محصولات بر اساس گروه محصول



bftarane
یک شنبه 08 بهمن 1391, 10:37 صبح
سلام و خدا قوّت
دوستان من می خوام با استفاده از لینک زیر Image Gallery درست کنم
http://www.aspsnippets.com/Articles/Image-Gallery-using-ASP.Net-DataList-Control-Part-I---Pagination.aspx
منتها با یه فرق اینکه می خوام
Image Gallery بر اساس گروه محصول باشه
یعنی اگه Cat_id مثلاً 15 باشه عکسهای پوشاک نشون داده بشه، اگه 14 باشه مثلاً کیف و کفش
بنابراین اومدم sp رو به این صورت نوشتم ولی با این ارور مواجه میشم دلیل چیه؟
Must declare the scalar variable "@cat_id".

USE [vo]
GO
/****** Object: StoredProcedure [dbo].[spx_Pager] Script Date: 01/27/2013 10:54:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[spx_Pager]

@PageNo int = 1,
@cat_id int,

@ItemsPerPage int = 10,

@TotalRows int out

AS

BEGIN

SET NOCOUNT ON

DECLARE

@StartIdx int,

@SQL nvarchar(max),

@SQL_Conditions nvarchar(max),

@EndIdx int



IF @PageNo < 1 SET @PageNo = 1

IF @ItemsPerPage < 1 SET @ItemsPerPage = 10



SET @StartIdx = (@PageNo -1) * @ItemsPerPage + 1

SET @EndIdx = (@StartIdx + @ItemsPerPage) - 1

SET @SQL = 'SELECT pd_picname

FROM (

SELECT ROW_NUMBER() OVER(ORDER BY pd_id) AS Row, *

FROM tbl_product ) AS tbl WHERE cat_id=@cat_id Row >= '

+ CONVERT(varchar(9), @StartIdx) + ' AND

Row <= ' + CONVERT(varchar(9), @EndIdx)

EXEC sp_executesql @SQL



SET @SQL = 'SELECT @TotalRows=COUNT(*) FROM tbl_product'

EXEC sp_executesql

@query = @SQL,

@params = N'@TotalRows INT OUTPUT',

@TotalRows = @TotalRows OUTPUT

END


در ضمن من این کد رو هم نوشتم منظورم اینه که cat_id رو مقدار دهی کردم (#C)

SqlCommand cmd = new SqlCommand("spx_Pager");

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@cat_id", SqlDbType.Int).Value = 15;


من خودم فکر می کنم در این قسمت شاید اشتباهی کرده باشم
FROM tbl_product ) AS tbl WHERE cat_id=@cat_id Row >= '

لطفاً راهنماییم کنید.

hossein_h62
یک شنبه 08 بهمن 1391, 10:54 صبح
من خودم فکر می کنم در این قسمت شاید اشتباهی کرده باشم
FROM tbl_product ) AS tbl WHERE cat_id=@cat_id Row >= '

سلام
تو قسمت شرط بین cat_id=@cat_id و Row >= فکر میکنم یه AND بخواد!

bftarane
یک شنبه 08 بهمن 1391, 12:40 عصر
اونو امتحان کرده بودم مشکل حل نشده بود

من از خود نویسنده اون مقاله هم سوال کردم در لینک زیر می تونید ببینید
ولی فکر می کنم سوال من رو کامل نخونده
چون آخرشم گفته باید cat_id@ رو به عنوان پارامتر ارسال کنی که من تو پست اولش گفتم این کار رو کردم و مشکل داره

لطفاً هر کس وقتش رو داره بخونه ببینه چیزی دستگیرش میشه؟

http://www.aspforums.net/Threads/203069/Image-gallery-by-category/

aslan
یک شنبه 08 بهمن 1391, 14:28 عصر
اینطوری نباید باشه ؟

SET @SQL = 'SELECT pd_picname

FROM (

SELECT ROW_NUMBER() OVER(ORDER BY pd_id) AS Row, *

FROM tbl_product WHERE cat_id=@cat_id ) AS tbl WHERE Row >= '

+ CONVERT(varchar(9), @StartIdx) + ' AND

Row <= ' + CONVERT(varchar(9), @EndIdx)

bftarane
دوشنبه 09 بهمن 1391, 01:07 صبح
سلام به همگی. بعد از کلی سرچ زدن و امتحان کردن درست شد بالاخره با کمک این دو تا لینک
http://www.codeproject.com/Questions/398571/Must-declare-the-scalar-variable-cid
http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/ab9bf39e-db2f-42ac-b1ac-1edd740c60c4

ولی خیلی دلم می خواد کامل سر در بیارم از کدهای بالا این جوری خوشم نمی یاد
ببینید مثلاً من هر جا یه سلکت دیدم اومدم کد زیر رو بهش اضافه کردم
CAST( @cat_id AS varchar)
به جز این قسمت
(

SELECT ROW_NUMBER() OVER(ORDER BY pd_id) AS Row, *

FROM tbl_product )
حالا موندم چرا بدون اینکه اونجا هم سلکت بر اساس cat_id باشه جواب گرفتم؟ البته خدا رو شکر ولی خیلی دلم می خواد این رو بدونم.
لطفاً راهنمایی کنید.
من خیلی در Sql ضعیفم.
این Sp کاملش


alter PROCEDURE [dbo].[spx_Pager]

@PageNo int = 1,

@ItemsPerPage int = 2,

@TotalRows int out,
@cat_id int


AS

BEGIN

SET NOCOUNT ON

DECLARE

@StartIdx int,

@SQL nvarchar(max),

@SQL_Conditions nvarchar(max),

@EndIdx int



IF @PageNo < 1 SET @PageNo = 1

IF @ItemsPerPage < 1 SET @ItemsPerPage = 10



SET @StartIdx = (@PageNo -1) * @ItemsPerPage + 1

SET @EndIdx = (@StartIdx + @ItemsPerPage) - 1

SET @SQL = 'SELECT pd_picname

FROM (

SELECT ROW_NUMBER() OVER(ORDER BY pd_id) AS Row, *

FROM tbl_product ) AS tbl WHERE Row >= '

+ CONVERT(varchar(9), @StartIdx) + ' AND

Row <= ' + CONVERT(varchar(9), @EndIdx) + ' And cat_id='+CAST( @cat_id AS varchar)

EXEC sp_executesql @SQL



SET @SQL = 'SELECT @TotalRows=COUNT(*) FROM tbl_product where cat_id='+CAST( @cat_id AS varchar)

EXEC sp_executesql

@query = @SQL,

@params = N'@TotalRows INT OUTPUT',

@TotalRows = @TotalRows OUTPUT

END