PDA

View Full Version : سوال: ارسال مقدار به یک sp



mahtab kf
پنج شنبه 12 بهمن 1391, 15:24 عصر
با سلام
مقدار name را با کوئری استرینگ به صفحه مورد نظرم ارسال می کنم و در آنجا به صورت زیر بازیابی می کنم:

string name = Request.QueryString["name"];
حالا این مقدار رو به یک sp می فرستم :

GridView1.DataSource = ADO.ExecuteDataset(name, PageIndex, PageSize);
اما خطای زیرو می گیره:

Must declare the scalar variable "@name".ممنون میشم راهنماییم کنید.

mahtab kf
پنج شنبه 12 بهمن 1391, 23:37 عصر
دوستان نمی تونید کمکم کنید؟

shervin837
جمعه 13 بهمن 1391, 00:30 صبح
باید متغیر name را در SP تعریف کنی.

mahtab kf
شنبه 14 بهمن 1391, 10:35 صبح
باید متغیر name را در SP تعریف کنی.
متغیر name را در SP به صورت زیر تعریف کردم :

public DataSet ExecuteDataset(string name, int PageIndex, int PageSize)
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[Paging]";
cmd.Parameters.AddWithValue("@name",name);
cmd.Parameters.AddWithValue("@PageIndex", PageIndex);
cmd.Parameters.AddWithValue("@PageSize", PageSize);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
con.Open();
da.Fill(ds);
con.Close();
return ds;
}
یه نکته دیگه اینه که من این تابع رو در یک کلاس به نام codTBItem تعریف کردم:

codTBItem ADO = new codTBItem();

mahtab kf
یک شنبه 15 بهمن 1391, 09:29 صبح
:ناراحت::افسرده: دوستان؟؟؟

fakhravari
یک شنبه 15 بهمن 1391, 10:35 صبح
کد sp بزار

mahtab kf
یک شنبه 15 بهمن 1391, 11:54 صبح
کد sp بزار
کد sp به صورت زیره:


ALTER PROCEDURE [dbo].[Paging]
(
@name nvarchar(20),
@PageIndex int,
@PageSize int
)
AS
BEGIN
declare @SQLText nvarchar(500)
set @SQLText = 'SELECT * FROM (SELECT * , ROW_NUMBER() OVER(ORDER BY name) as RowNum FROM TBaddItem where NameItem=@name ) as DerivedTableName WHERE RowNum BETWEEN '+ str(@PageIndex) +' AND'+ str((@PageIndex+ @PageSize) - 1)
exec(@SQLText)
END

ممنون

fakhravari
یک شنبه 15 بهمن 1391, 15:02 عصر
یه مثال

declare @TableName nvarchar(20) = 'B_Topics';
declare @PageIndex int = 1;
declare @PageSize int = 10;
declare @OrderID nvarchar(20) = 'TopicID';

declare @RowStart int=0;
declare @RowFnish int=0;
declare @SQL nvarchar(max);

set @RowStart = (@PageIndex -1) * @PageSize
set @RowFnish = @PageIndex * @PageSize


set @SQL ='WITH T1 AS
(
select row_number() over(order by TopicID) as Rng,*
from '+@TableName+'
)
select * from
(
select * from T1
WHERE Rng BETWEEN '+cast(@RowStart as nvarchar)+' and '+cast(@RowFnish as nvarchar)+'
) T1
order by '+@OrderID+''

exec sp_executesql @SQL

این مقادیر مقدار بدین خروجی عوض میشه
declare @TableName nvarchar(20) = 'B_Topics';
declare @PageIndex int = 1;
declare @PageSize int = 10;
declare @OrderID nvarchar(20) = 'TopicID';

mahtab kf
یک شنبه 15 بهمن 1391, 17:12 عصر
این مقادیر مقدار بدین خروجی عوض میشه

میشه لطفاً بیشتر توضیح بدید دقیقاً مشکلم چیه؟