PDA

View Full Version : فرق این کدهای برای اجزا تقاضا در پایگاه داده



alonemm
دوشنبه 25 مرداد 1389, 14:01 عصر
باسلام:
دوستان در چند مورد زیر فرق بین این کدها برای اجرای تقاضا از جدول در چیه؟

1-
ExecuteNoneQuery
2-
ExecuteScaler
3-
ExecuteReader


با تشکر.

rana-writes
دوشنبه 25 مرداد 1389, 14:14 عصر
ExecuteNoneQuery زمانی استفاده میشه که شما تغییری توی بانک به وجود میارین
مثلا عمل درج یا آپدیت یا حذف تو جدولهاتون میذارین
ExecuteReader هم زمانی استفاده میشه که شما از بانک چیزی رو میخونین
در واقع زمانی که دستور Sql شما دستور Select باشه از این استفاده میشه
در مورد گزینه دوم اطلاعاتی ندارم

موفق باشین

rana-writes
دوشنبه 25 مرداد 1389, 14:16 عصر
این یه نمونه استفاده از ExecuteNoneQuery



public static int AddPost(string UserName, string PostTitle, string PostContent,
string PostYear,string PostMonth,string PostDay, bool PostTemp,int SumComment)
{
int roweffect = 0;
using (SqlConnection connection = ConnectionManager.ConnectToHalghehDB())
{
SqlCommand command = new SqlCommand("Ha_InsertPost", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = UserName;
command.Parameters.Add("@PostTitle", SqlDbType.NVarChar).Value = PostTitle;
command.Parameters.Add("@PostContent", SqlDbType.NText).Value = PostContent;
command.Parameters.Add("@PostYear", SqlDbType.NVarChar).Value = PostYear;
command.Parameters.Add("@PostMonth", SqlDbType.NVarChar).Value = PostMonth;
command.Parameters.Add("@PostDay", SqlDbType.NVarChar).Value = PostDay;
command.Parameters.Add("@PostTemp", SqlDbType.Bit).Value = PostTemp;
command.Parameters.Add("@SumComment", SqlDbType.Int).Value = SumComment;
roweffect = command.ExecuteNonQuery();
}
return roweffect;
}

این هم یک نمونه از ExecuteReader



public static SqlDataReader ShowUserName(string Name)
{
SqlConnection connection = ConnectionManager.ConnectToHalghehDB();
SqlCommand command = new SqlCommand("Ha_ShowUserName", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Name", SqlDbType.NVarChar).Value = Name;
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection);
return reader;
}

از این کلاس برای نمایش نام کاربری باز هم با یک stored استفاده کردم

موفق باشین

alonemm
دوشنبه 25 مرداد 1389, 14:27 عصر
در نمونه کد بالا
1- نام جدول را کجا وارد می کنید؟
2- این sp کجاست و آیا میسازیدش؟
(آخه من با sp کارکردم به صورتی که در sqlserver بسازمش و بعد در برنامه آن را فراخانی و پارامترهارو ارجا بدم)

salehbagheri
دوشنبه 25 مرداد 1389, 20:59 عصر
برای آشنایی با متد ExecuteScalar به لینک زیر برید
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.asp x

و برای دانستن محل استفاده و کاربرد هریک به لینک زیر:
http://blogs.x2line.com/al/archive/2007/05/01/3049.aspx

خوندن چند صفحه کتاب (فقط چند صفحه) در روز بسیاری از این مسائل رو حل میکنه ... :چشمک:

با تشکر

rana-writes
دوشنبه 25 مرداد 1389, 21:09 عصر
در نمونه کد بالا
1- نام جدول را کجا وارد می کنید؟
2- این sp کجاست و آیا میسازیدش؟
(آخه من با sp کارکردم به صورتی که در sqlserver بسازمش و بعد در برنامه آن را فراخانی و پارامترهارو ارجا بدم)

سلام
منم دقیقا مثل شما عمل میکنم و Sp رو توی Sqlserver می سازم و اینجا فراخوانی کردم و پارامترها رو بهش ارسال کردم
مثلا Sp کد اول به این شکله:


CREATE PROCEDURE dbo.Ha_InsertPost
(
@UserName nvarchar(10),
@PostTitle nvarchar(200),
@PostContent ntext,
@PostYear nchar(4),
@PostMonth nchar(2),
@PostDay nchar(2),
@PostTemp bit,
@SumComment int
)
AS
BEGIN TRANSACTION
INSERT INTO Halgheh_Post
(UserName, PostTitle, PostContent,PostYear,PostMonth, PostDay,PostTemp,SumComment)
VALUES (@UserName, @PostTitle, @PostContent, @PostYear,@PostMonth,@PostDay, @PostTemp,@SumComment)


IF @@ERROR<>0
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO

موفق باشین

alonemm
چهارشنبه 27 مرداد 1389, 13:49 عصر
با تشکر از همه دوستان.
اگه کسی روشی برای ساخت غیر دستی و به صورت داینامیک sp که پس از انجام کار هم پاک شه داره بزاره.

با تشکر.

alonemm
پنج شنبه 28 مرداد 1389, 09:27 صبح
ExecuteNoneQuery زمانی استفاده میشه که شما تغییری توی بانک به وجود میارین
مثلا عمل درج یا آپدیت یا حذف تو جدولهاتون میذارین
ExecuteReader هم زمانی استفاده میشه که شما از بانک چیزی رو میخونین
در واقع زمانی که دستور Sql شما دستور Select باشه از این استفاده میشه
در مورد گزینه دوم اطلاعاتی ندارم

موفق باشین

ExecuteScaler
من کارشو پیدا کرم این متد برای فراخانی اولین و فقط یک رکورد اجرایی تقاضا ی ما می باشد و از نظر سرعت خیلی بالایی دارد.
مثل برای بازیابی رکوردی بر اساس یک فیلد که تکراری نیست و جواب فقط یک رکورد است عالی میباشد.