PDA

View Full Version : فراخوانی stored procedure



pikoolas
یک شنبه 08 فروردین 1389, 13:56 عصر
سلام.
من یک stored procedure به صورت زیر نوشتم


ALTER PROCEDURE [dbo].[sp_Addnews]
-- Add the parameters for the stored procedure here
@language char(3) ,
@text nvarchar(max),
@titel nvarchar(50),
@image nvarchar(50),
@writer nvarchar(50),
@newsCategory nvarchar(10),
@date datetime
AS
DECLARE @maxid int
EXEC @maxid = sp_max

BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
insert into tbl_newsid(newsDate) values(@date)
insert into tbl_news(newaid,language,text,titlet,image,writer, newscategory)
values(@maxid,@language,@text,@titel,@image,@write r,@newsCategory)

END

که پروسیجر sp_max هم در اون فراخوانی کردم .


ALTER PROCEDURE [dbo].[sp_max]
-- Add the parameters for the stored procedure here

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT max(newsid) from tbl_newid
END

ولی توی برنامه با این خطا مواجه می شم .


System.Data.SqlClient.SqlException: Procedure or Function 'sp_addnews' expects parameter '@newsId', which was not supplied. at System.Data.SqlClient.SqlConnection.OnError(SqlExc eption exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnErro r(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndW arning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteRead er(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderT ds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNo nQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Save.trycatch()

علت این خطا به نظر شما چی می تونه باشه

saied_genius
یک شنبه 08 فروردین 1389, 17:10 عصر
توي چه محيطي داريد از آن استفاده مي کنيد ؟ (visual studio ?)

با چه زباني برنامه نويسي مي کنيد؟

pikoolas
دوشنبه 09 فروردین 1389, 00:51 صبح
توي چه محيطي داريد از آن استفاده مي کنيد ؟ (visual studio ?)

با چه زباني برنامه نويسي مي کنيد؟
در محیط vs 2005 با C#دارم web app درست می کنم

Salah Sanjabian
دوشنبه 09 فروردین 1389, 13:34 عصر
دوست عزیز شما لازم نیست از دو تا پروسیجر استفاده کنی. اگر هم از دو تا پروسیجر استفاده میکنی باید اون مقدار رو return کنی که این کارو نکردی.
ولی به نظر من نمیخواد از دو تا پروسیجر استفاده کنی. این جوری بنویس


declare @maxid int
select @maxid=max(newsid) from tbl_newid

pikoolas
سه شنبه 10 فروردین 1389, 12:11 عصر
من stored procedure را در فولدر دیتابیس سایت ذخیره کردم ولی وقتی تو برنامه فراخوانیش میکنم با این خطا مواجه می شم.


System.Data.SqlClient.SqlException: Could not find stored procedure 'sp_news'. at System.Data.SqlClient.SqlConnection.OnError(SqlExc eption exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnErro r(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndW arning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteRead er(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderT ds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNo nQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Class1.trycatch()

Salah Sanjabian
سه شنبه 10 فروردین 1389, 13:34 عصر
من stored procedure را در فولدر دیتابیس سایت ذخیره کردم ولی وقتی تو برنامه فراخوانیش میکنم با این خطا مواجه می شم.


System.Data.SqlClient.SqlException: Could not find stored procedure 'sp_news'. at System.Data.SqlClient.SqlConnection.OnError(SqlExc eption exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnErro r(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndW arning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteRead er(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderT ds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNo nQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Class1.trycatch()


خوب نمیتونه پروسیجرت رو پیدا کنه. به احتمال زیاد شماداری از ویرایش Express استفاده میکنی. Breakpoint بذار ببین اشکال کار از کجاست.
یه چیز دیگه .این Error با قبلی که فرق میکنه. یه چیز دیگه. اگه از همون پروسیجر تو پست اولت استفاده میکنی اسم اون هست Sp_Addnews.در حالیکه این خطا میگه نمیتونم sp_news رو پیداکنم. مطمئنی اسم پروسیجرت همینه؟

pikoolas
سه شنبه 10 فروردین 1389, 14:30 عصر
اسم پروسیجر رو عوض کردم . مشکل اولی حل شد . این پروسیجر ها توی مسیر default که ذخیره میشن مشکلی نیست . مسیر dafault هم خارج از فولدر سایت هست . من می خوام این پروسیجر رو تو فولدر خود سایت باشه که بعدا که سایت upload شد پروسیجر ها هم با سایت upload بشن . ولی نمی دونم چطوری باید مسیر خواندن پروسیجر ها رو عوض کنم که از فولدری که الان توش هستند خوانده بشن نه مسیر defult.
یک سوال دیگم اینه که وقتی دیتابیس رو import میکنیم پروسیجرها از همون مسیر default به دیتابیس اضافه می شن؟