View Full Version : فرق این کدهای برای اجزا تقاضا در پایگاه داده
alonemm
دوشنبه 25 مرداد 1389, 15:01 عصر
باسلام:
دوستان در چند مورد زیر فرق بین این کدها برای اجرای تقاضا از جدول در چیه؟
1-
ExecuteNoneQuery
2-
ExecuteScaler
3-
ExecuteReader
با تشکر.
rana-writes
دوشنبه 25 مرداد 1389, 15:14 عصر
ExecuteNoneQuery زمانی استفاده میشه که شما تغییری توی بانک به وجود میارین
مثلا عمل درج یا آپدیت یا حذف تو جدولهاتون میذارین
ExecuteReader هم زمانی استفاده میشه که شما از بانک چیزی رو میخونین
در واقع زمانی که دستور Sql شما دستور Select باشه از این استفاده میشه
در مورد گزینه دوم اطلاعاتی ندارم
موفق باشین
rana-writes
دوشنبه 25 مرداد 1389, 15: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, 15:27 عصر
در نمونه کد بالا
1- نام جدول را کجا وارد می کنید؟
2- این sp کجاست و آیا میسازیدش؟
(آخه من با sp کارکردم به صورتی که در sqlserver بسازمش و بعد در برنامه آن را فراخانی و پارامترهارو ارجا بدم)
salehbagheri
دوشنبه 25 مرداد 1389, 21: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, 22: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, 14:49 عصر
با تشکر از همه دوستان.
اگه کسی روشی برای ساخت غیر دستی و به صورت داینامیک sp که پس از انجام کار هم پاک شه داره بزاره.
با تشکر.
alonemm
پنج شنبه 28 مرداد 1389, 10:27 صبح
ExecuteNoneQuery زمانی استفاده میشه که شما تغییری توی بانک به وجود میارین
مثلا عمل درج یا آپدیت یا حذف تو جدولهاتون میذارین
ExecuteReader هم زمانی استفاده میشه که شما از بانک چیزی رو میخونین
در واقع زمانی که دستور Sql شما دستور Select باشه از این استفاده میشه
در مورد گزینه دوم اطلاعاتی ندارم
موفق باشین
ExecuteScaler
من کارشو پیدا کرم این متد برای فراخانی اولین و فقط یک رکورد اجرایی تقاضا ی ما می باشد و از نظر سرعت خیلی بالایی دارد.
مثل برای بازیابی رکوردی بر اساس یک فیلد که تکراری نیست و جواب فقط یک رکورد است عالی میباشد.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.