ورود

View Full Version : تبدیل یک SP به دستورات Sql به صورت inline



bftarane
دوشنبه 08 مهر 1392, 14:48 عصر
سلام.
من این کدها رو چطور می تونم به صورت inline بنویسم نه با استفاده از استور پروسیجر؟

USE [vo]
GO
/****** Object: StoredProcedure [dbo].[rpt_lookpd_paging] Script Date: 09/30/2013 15:21:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[rpt_lookpd_paging]

@startRowIndex int,

@pageSize int,

@totalCount int output,
@catid int

AS

BEGIN

SET NOCOUNT ON;

SET @totalCount = 0

SET @startRowIndex = @startRowIndex + 1

BEGIN

SELECT * FROM (

Select tbl_product.*, ROW_NUMBER() OVER (ORDER BY tbl_product.pd_id DESC) as RowNum

FROM tbl_product

) as ProductList

WHERE

RowNum BETWEEN @startRowIndex AND (@startRowIndex + @pageSize) - 1 and cat_id=@catid

ORDER BY pd_id DESC



SELECT @totalCount = Count(pd_id) FROM tbl_product

END

END

مثلاً اون متغیری که از نوع output تعریف شده و یا اینکه دستورات سلکت پشت سر هم و همینطور تعریف متغیرها همراه با نوع داده اومدن اینا رو چطور میشه بدون استفاده از Sp نوشت؟
من با Access دارم کار می کنم و این طور که متوجه شدم در اکسس نمی شه از Sp استفاده کرد.

hossein_h62
دوشنبه 08 مهر 1392, 15:13 عصر
سلام
بدون sp بصورت زیر میشه :

Declare @startRowIndex int
Declare @pageSize int
Declare @totalCount int
Declare @catid int
SET @totalCount = 0
SET @startRowIndex = @startRowIndex + 1

SELECT * FROM (
Select tbl_product.*, ROW_NUMBER() OVER (ORDER BY tbl_product.pd_id DESC) as RowNum
FROM tbl_product
) as ProductList
WHERE
RowNum BETWEEN @startRowIndex AND (@startRowIndex + @pageSize) - 1 and cat_id=@catid
ORDER BY pd_id DESC

SELECT @totalCount = Count(pd_id) FROM tbl_product

البته چند تا نکته :
یکی اینکه متغیرهای pagesize@ و catid@ باید دستی مقداردهی بشن، نکته بعد اینکه با توجه به نوع کوئری و تابعی که درش بکار رفته بعید میدونم این کوئری روی اکسس جواب بده!

bftarane
دوشنبه 08 مهر 1392, 15:52 عصر
ممنون فعلاً از یه روش دیگه صفحه بندی انجام دادم و کارم راه افتاد. ممنون این رو هم تست می کنم.

bftarane
سه شنبه 09 مهر 1392, 21:08 عصر
سلام.
با دستورات زیر داره کار میکنه البته با Sql.

private void GetProductsPageWise(int pageIndex)
{
string constring = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constring))
{
using (SqlCommand cmd = new SqlCommand("SELECT ROW_NUMBER() OVER (ORDER BY [pd_id] ASC) AS RowNumber ,* INTO #Results FROM [tbl_product] where cat_id=@cat_id SELECT @RecordCount = COUNT(*) FROM #Results SELECT * FROM #Results WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1 DROP TABLE #Results", con))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@PageIndex", pageIndex);
cmd.Parameters.AddWithValue("@PageSize", 3);
cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4);
cmd.Parameters["@RecordCount"].Direction = ParameterDirection.Output;
cmd.Parameters.AddWithValue("@cat_id", Request.QueryString["pcId"]);
con.Open();
IDataReader idr = cmd.ExecuteReader();
lst.DataSource = idr;
lst.DataBind();
idr.Close();
con.Close();
int recordCount = Convert.ToInt32(cmd.Parameters["@RecordCount"].Value);
this.PopulatePager(recordCount, pageIndex);
}
}
}

................
Declare که می نوشتم خطا می داد ولی اینطوری که داره درست کار میکنه.

ولی با اکسس ارور میده که ظاهراً دلیلش اینه که اکسس ROW_NUMBER رو پشتیبانی نمی کنه.
حالا بازم سعی می کنم ببینم می تونم معادلی برای ROW_NUMBER در اکسس پیدا کنم یا نه.
راستی اینم منبعی که برای کدهای بالا ازش استفاده کردم
http://aspsnippets.com/Articles/Custom-Paging-in-ASP.Net-GridView-using-SQL-Server-Stored-Procedure.aspx