PDA

View Full Version : چطور میتونیم بجای StoredProcedure از Function استفاده کرد



raziee
یک شنبه 13 اردیبهشت 1388, 17:09 عصر
سلام
من همیشه برای پرس و جو از بانک اطلاعاتی از StoredProcedure استفاده میکنم.
هر کسی رو هم که دیده ام تا حالا به همین نحو بوده.
حالا سوالم اینه که چطور میشه از Function به جای StoredProcedure استفاده کرد؟
آیا اصلا همچین امکانی وجود داره؟

مثلا برای درج اطلاعات اگه اطلاعات قبلا وجود داشته باشه بوسیله Function یک مقدار به برنامه برگرده.
امیدوارم که منظورم رو متوجه شده باشید.

چطور میشه یه مقدار رو مستقیما از بانک بیرون کشید.
ممنون

NewFoxStudent
یک شنبه 13 اردیبهشت 1388, 17:33 عصر
یه راهش اینه که تابع رو به صورت کوئری اجرا کنید
مثلا من تابعی دارم که در سمت بانک مقدار تاریخ شمسی رو برمیگردونه توی C# به این صورت ازش استفاده میکنم



SqlConnection sqlConnection = new SqlConnection(connectiostring);
SqlCommand sqlCommand = new SqlCommand("Select dbo.GetShamsiDate() ",sqlConnection);
string sDate = sqlCommand.ExecuteScaler().ToString();

raziee
یک شنبه 13 اردیبهشت 1388, 19:41 عصر
یه راهش اینه که تابع رو به صورت کوئری اجرا کنید
مثلا من تابعی دارم که در سمت بانک مقدار تاریخ شمسی رو برمیگردونه توی C# به این صورت ازش استفاده میکنم



SqlConnection sqlConnection = new SqlConnection(connectiostring);
SqlCommand sqlCommand = new SqlCommand("Select dbo.GetShamsiDate() ",sqlConnection);
string sDate = sqlCommand.ExecuteScaler().ToString();


یعنی دیگه از StoredProcedureاستفاده نمیکنیم؟
اونوقت تو بانک بایدFunction بنویسم دیگه درسته بعد طریقه فراخونیش تنها به همین صورته؟


Select dbo.Function

NewFoxStudent
دوشنبه 14 اردیبهشت 1388, 09:01 صبح
یکی از راههای استفاده از تابع اینه
اگه راه دیگه ای داشته باشه من بلد نیستم

unique1984
شنبه 09 خرداد 1388, 12:47 عصر
اگه تابع ما پارامتر داشته باشه ، نحوه صدا زدنش به چه صورته؟

a.maleki
شنبه 09 خرداد 1388, 20:31 عصر
دوستان تا اونجائی که من اطلاع دارم توابع فقط می تونند یه مقدار رو برگردونند حالا با این حال فکر نمیکنید امکان استفاده دستوراتی مانند insert و update و... در توابع وجود نداره

adinochestva
شنبه 09 خرداد 1388, 21:16 عصر
ما توابع table valued رو هم داريم كه table بر مي گردونند و كلا امكان استفاده از update و insert چه در scalar valued يا table valued وجود دارد

raziee
شنبه 16 خرداد 1388, 14:09 عصر
من اگه بخوام یه فانکشنی تو بانکم داشته باشم که اگر نام کاربری و گذرواژه درست بود مقدار True رو برگردونه و اگر هم درست نبود مقدار False رو باید چه کار کنم؟

بعد تو دات نت چه جوری میتونم این مقدار رو بخونم؟

ببینید من این کار رو (لاگین کاربر) رو با استفاده از Select کردن میگرفتم

SELECT tb_Member.*
FROM tb_Member
WHERE (UserName = ?) AND (Password = ?)
بعد برای اینکه ببینم سطری وجود داره یا نه از Count که داخل DataView استفاده می کردم ولی میدونم که کار صحیحی نیست(یعنی کارای بهتر هم میشه کرد.)
حالا دوستان چه چیزی رو پیشنهاد میدند؟

ASKaffash
شنبه 30 خرداد 1388, 09:16 صبح
سلام
من همیشه برای پرس و جو از بانک اطلاعاتی از StoredProcedure استفاده میکنم.
هر کسی رو هم که دیده ام تا حالا به همین نحو بوده.
حالا سوالم اینه که چطور میشه از Function به جای StoredProcedure استفاده کرد؟
آیا اصلا همچین امکانی وجود داره؟

مثلا برای درج اطلاعات اگه اطلاعات قبلا وجود داشته باشه بوسیله Function یک مقدار به برنامه برگرده.
امیدوارم که منظورم رو متوجه شده باشید.

چطور میشه یه مقدار رو مستقیما از بانک بیرون کشید.
ممنون


سلام
درون بدنه تابع SQLSever محدودیتهائی وجود دارد:



The following statements are allowed in the body of a multi-statement function. Statements not in this list are not allowed in the body of a function:

Assignment statements.
Control-of-Flow statements.
DECLARE statements defining data variables and cursors that are local to the function.
SELECT statements containing select lists with expressions that assign values to variables that are local to the function.
Cursor operations referencing local cursors that are declared, opened, closed, and deallocated in the function. Only FETCH statements that assign values to local variables using the INTO clause are allowed; FETCH statements that return data to the client are not allowed.
INSERT, UPDATE, and DELETE statements modifying table variables local to the function.
EXECUTE statements calling an extended stored procedures.

raziee
یک شنبه 14 تیر 1388, 17:40 عصر
درون بدنه تابع SQLSever محدودیتهائی وجود دارد:
میشه بیشتر توضیح بدین.

ASKaffash
شنبه 20 تیر 1388, 11:09 صبح
سلام
درون بدنه یک تابع :
نمیتوان دستورات Insert و Update و Delete را بکار برد
نمیتوان از Dynamic SQL استفاده کرد (Execute)
نمیتوان یک دستور Select مشابه درون SP نوشت
....