PDA

View Full Version : خطا هنگام ذخیره StoredProcedure



mohammad2407
سه شنبه 17 بهمن 1391, 19:28 عصر
سلام دوستان عزیز من میخوام از LINQ استفاده کنم و یک StoredProcedure ساختم با کد زیر

ALTER PROCEDURE dbo.FSave @FirstName nchar(18), @LastName
nchar(18), @PhoneNumber int, @Age int
AS
Insert into table1 values(@FirstName,@LastName ,@PhoneNumber , @Age)
RETURN

ولی وقتی میخوام save کنم خطا میده

متن خطا ::::::::

Invalid object name dbo.FSave

ordebehesht
سه شنبه 17 بهمن 1391, 19:30 عصر
خوب کد سی شارپ رو میزاشتی یه نگا بچه ها کنن

plus
سه شنبه 17 بهمن 1391, 19:33 عصر
دوست عزیز برای ساخت PROCUDURE بایستی از CREATE PROCEDURE استفاده کنید. ALTER PROCEDURE برای ویرایش هست.

CREATE PROCEDURE dbo.FSave @FirstName nchar(18), @LastName
nchar(18), @PhoneNumber int, @Age int
AS
Insert into table1 values(@FirstName,@LastName ,@PhoneNumber , @Age)
RETURN

mohammad2407
سه شنبه 17 بهمن 1391, 19:35 عصر
من هنوز کد سی شارپی برای فرم ننوشتم من فعلا میخوام StoredProcedure بسازم اصلا ذخیره نشدن StoredProcedure ربطی به کد سی شارپ نداره

در مراحل بعد باید کد نویسی انجام بدیم

mohammad2407
سه شنبه 17 بهمن 1391, 19:38 عصر
خب حالا من هم دارم همین کارو میکنم کد زیر میاد برای بار اول

CREATE PROCEDURE dbo.StoredProcedure1
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
/* SET NOCOUNT ON */
RETURN

ordebehesht
سه شنبه 17 بهمن 1391, 19:39 عصر
آره راست میگی دقت نکردم به این موضوع دوستمون plus به چیز جالبی اشاره کرده پوزش نسبت به بی دقتی من

mohammad2407
سه شنبه 17 بهمن 1391, 22:23 عصر
باز هم خطا میده

ALTER PROCEDURE dbo.esave
@Name nvarchar,@LastName nvarchar,@Tel nvarchar,Age nvarchar
AS
Insert into form values(@Name,@LastName,@Tel,@Age)
RETURN

reza1371
سه شنبه 17 بهمن 1391, 22:38 عصر
آقا پرانتز نذاشتی

CREATE PROCEDURE dbo.FSave (@FirstName nchar(18), @LastName
nchar(18), @PhoneNumber int, @Age int)
AS
.
.
.

mohammad2407
سه شنبه 17 بهمن 1391, 23:38 عصر
اره فقط یه مشکلی هست نمیزاره با نام دلخواه خودم ذخیره کنم خطا میده یعنی حتما باید با نام خودش باشه

الان از کد زیر برای اپدیت دارم استفاده میکنم ولی اجازه ثبت با نام منو نمیده


ALTER PROCEDURE dbo.Fedit
( @FirstName nvarchar(10), @LastName nvarchar(18), @phoneNumber int, @age int)
AS
Update Table1 Set FirstName=@FirstName , LastName=@LastName , Age=@Age
where PhoneNumber=@PhoneNumber
RETURN

Directx
سه شنبه 17 بهمن 1391, 23:50 عصر
یعنی چی با نام دلخواه؟
خوب از Managment روی پراسیجر کلیک راست کن Rename رو بزن

aslan
چهارشنبه 18 بهمن 1391, 00:09 صبح
اره فقط یه مشکلی هست نمیزاره با نام دلخواه خودم ذخیره کنم خطا میده یعنی حتما باید با نام خودش باشه

الان از کد زیر برای اپدیت دارم استفاده میکنم ولی اجازه ثبت با نام منو نمیده


ALTER PROCEDURE dbo.Fedit
( @FirstName nvarchar(10), @LastName nvarchar(18), @phoneNumber int, @age int)
AS
Update Table1 Set FirstName=@FirstName , LastName=@LastName , Age=@Age
where PhoneNumber=@PhoneNumber
RETURN


سلام
دوست عزیز دقت بفرمایید :
اگر قصد دارین نام پروسیجر بالا را با نام دلخواه خودتون عوض کنین بجای ALTER باید CREATE راجایگزین کنین

mohammad2407
چهارشنبه 18 بهمن 1391, 00:11 صبح
شما اگر Renameدیدی برای من یک عکس بگیر بزار اینجا

ما باید نام StoredProcedure در کد مشخص کنیم قابلیت Rename وجود نداره

مثال کد زیر میشه

ALTER PROCEDURE dbo.Fedit
( @FirstName nvarchar(10), @LastName nvarchar(18), @phoneNumber int, @age int)
AS
Update Table1 Set FirstName=@FirstName , LastName=@LastName , Age=@Age
where PhoneNumber=@PhoneNumber
RETURN


که در قسمت ALTER PROCEDURE dbo.Fedit نام StoredProcedure مشخص شده یعنی Fedit

mohammad2407
چهارشنبه 18 بهمن 1391, 00:19 صبح
سلام
دوست عزیز دقت بفرمایید :
اگر قصد دارین نام پروسیجر بالا را با نام دلخواه خودتون عوض کنین بجای ALTER باید CREATE راجایگزین کنین

بله تست کردم ولی متاسفانه نشد فقط با نام خودش این کار صورت میگیره به نام من ایراد میگیره

aslan
چهارشنبه 18 بهمن 1391, 00:26 صبح
بله تست کردم ولی متاسفانه نشد فقط با نام خودش این کار صورت میگیره به نام من ایراد میگیره
ببینید شما با کلیک بر روی پروسیجر موجود با متن بالا مواجه میشین ( در واقع میخواهید به این شکل نام پروسیجر موجود را عوض کنید که ظاهرا اینکار شدنی نیست )
میتوانید همین کد بالا را کپی کنید ,و این پروسیجر و ببندید و بعد با Create Procedure جدید
متن کپی شده را Paste کنید و بجای Alter هم Create بزارید و نام پروسیجر را با نام دلخواه خود عوض کنید . در واقع پروسیجر جدید بسازید. همین
در واقع با روشی که دارین کار میکنین با ALTER PROCEDURE اجازه اعمال تغییر در دستورات پروسیجر را دارین و نه تغییر نام پروسیجر را

mohammad2407
چهارشنبه 18 بهمن 1391, 00:31 صبح
خب من هم دارم همین کارو انجام میدم ولی متاسفانه شدنی نیست و خطا میده حالا مهم نیست

من تازه دارم با LINQ کار میکنم ایا باید در قسمت Using ها ( کتابخانه ها ) Using جدیدی اضافه بشه یا دیگه نیازی نیست چون الان داره از کد زیر ایراد میگیره
var DB = new BbLINQDataContext();
dataGridView1.DataSource = DB.Table1s;

البته فقط از قسمت

BbLINQDataContext();

اون مشکل هم سعی میکنم بیشتر روش کار کنم شاید حق با شما باشه

aslan
چهارشنبه 18 بهمن 1391, 00:39 صبح
using System.Linq;

Mahmoud.Afrad
چهارشنبه 18 بهمن 1391, 03:43 صبح
موقعی که دارید SP را CREATE میکنید بایستی نام استروپروسیجر را انتخاب کنید یعنی همون چیزی که Plus عزیز کدشو گذاشتند. یعنی SP جدید با نام جدید بسازید و قبلی رو delete کنید.


اگر بخواهید نام SP را تغییر بدید ، اگر از sqlserver management studio استفاده می کنید به راحتی میتونید با راست کلیک کردن روی نام SP و انتخاب rename نام استورپروسیجر را تغییر دهید.

اما

اگر از ویژوال استادیو استفاده می کنید میتونید با اجرای کدهای t-sql نام استورپروسیجر را تغییر دهید. مراحل زیر رو دنبال کنید:

1- از پنجره server explorer روی دیتابس راست کلیک کرده و گزینه Detach DataBase را انتخاب کنید تا دیتابیس آزاد بشه.

2- از منوی Data و از زیرمنوی Transact-SQL Editor گزینه New Query Connection... را انتخاب کنید.

3- با انجام مرحله قبل پنجره Connect to Server باز میشه. در قسمت server name نام سرور را (local)\sqlexpress تایپ کرده و کانکت شوید.
پنجره ای باز میشود که می توانید کوئری های sql را تایپ و اجرا (execute) کنید.

4- ابتدا میبایست دیتابیس را به سرور حال حاضر اتچ کنیم. از طریق کد زیر می توان این کار را انجام داد:

use master
exec sp_attach_db 'nick_name' , 'database file path'

sp_attach_db استورپروسیجر سیستمی برای اتچ کردن دیتابیس میباشد.
منظور از nick_name نامی هست که دیتابیس با این نام اتچ خواهد شد.
منظور از database file path آدرس فایل دیتابیس پروژه است. برای بدست آوردن این آدرس ، از پنجره server explorer روی دیتابیس راست کلیک و Properties را انتخاب کنید. از پنجره Properties پراپرتی Primary File Path مسیر فایل دیتابیس است که میتوانید کپی کنید. پس دو خط فوق برای پروژه (پروژه آزمایشی من) به اینصورت خواهد شد مثال:

use master
exec sp_attach_db 'nick_name' , 'H:\C#‎\Projects\WindowsFormsApplication1\Window sFormsApplication1\Database1.mdf'

خب حالا این دو خط را سلکت کنید و بعد روی متن سلکت شده راست کلیک و Execute SQL را انتخاب کنید (یا از کلید میانبر ctrl+shift+e استفاده کنید). پیغام Command(s) completed successfully. باید ظاهر بشه. اگر نشد جایی از کدها مشکل داره.

5- حالا باید در این دیتابیس اتچ شده ، استورپروسیجر مورد نظر را تغییر نام دهیم:

use nick_name
exec sp_rename 'StoredProcedure1' , 'new_name'

nick_name همان نامی است که در مرحله4 برای دیتابیس انتخاب کردیم.
منظور از StoredProcedure1 نام فعلی استورپروسیجر است.
new_name نام جدیدی است که برای استورپروسیجر انتخاب کرده ایم.

حالا این دوخط را سلکت و Execute کنید.

6- در این مرحله باید دیتابیس را دیتچ کنیم:

use master
exec sp_detach_db 'nick_name'

sp_detach استورپروسیجری سیستمی برای دیتچ کردن دیتابیس است.
nick_name هم نامی است که در مرحله4 برای دیتابیس انتخاب کردیم.
با Execute کردن این دو خط کار تمام است.

7- از پنجره server explorer روی دیتابیس راست کلیک کرده و refresh را انتخاب کنید. میبینید که نام استورپروسیجر تغییر کرده است.

(توجه کنید که نمی توانید همه 6 خط کد را با هم اجرا کنید و باید هر دو خط را طبق مراحل گفته شده به طور جدا اجرا کنید)