PDA

View Full Version : کمک برای بهینه سازی یک تابع



na3er-faraji
جمعه 26 شهریور 1389, 11:09 صبح
public int AddNewUser(string name, string address, string tel, string mobile, string comment)
{

string commandText="INSERT INTO tblUsers(Name,Address,Tel,Mobile,Comment) Values('" + name + "','" +
address + "','" + tel + "','" + mobile + "','" + comment + "')";

return ExecuteNoneQuery(commandText);

این روش نوشتن جواب میده ولی میدونم که غلطه . کسی راه بهتری سراع داره ؟؟؟ البته یک روش دیگه که به ذهن خودم رسید String.Format هستش.


public int AddNewUser(string name, string address, string tel, string mobile, string comment)
{

string commandText = string.Format("INSERT INTO tblUsers(Name,Address,Tel,Mobile,Comment) Values" +
"('{0}','{1}','{2}','{3}','{4}'", name, address, tel, mobile, comment);


return ExecuteNoneQuery(commandText);


}

آیا راه دیگه ای هم هست که اینجوری رشته شلوغ پلوغ نباشه؟؟؟؟

صباح فتحی
جمعه 26 شهریور 1389, 11:56 صبح
سلام منم سوالم همینه..اصلا این روش متصل شدن به بانک درسته؟؟:متفکر:

حامد مصافی
جمعه 26 شهریور 1389, 11:59 صبح
آیا راه دیگه ای هم هست که اینجوری رشته شلوغ پلوغ نباشه؟؟؟؟
با توجه به مسئله شما string.Format بهترين گزينه است


سلام منم سوالم همینه..اصلا این روش متصل شدن به بانک درسته؟؟:متفکر:
خير، بهتر است كد ها در SP باشند.

shima2006
جمعه 26 شهریور 1389, 12:03 عصر
جناب swi چرا فکر می کنید روشتون غلطه ؟؟؟

خب همینطوری از دستور INSERT استفاده می کنن دیگه !
البته من خودم برای ثبت اطلاعات در دیتابیس از روش بایند کردن کنترل ها استفاده می کنم که دیگه نیازی به این دستور نیست ، ولی در هر حال به نظر من این روش اصلا غلط نیست .

صباح فتحی
جمعه 26 شهریور 1389, 12:04 عصر
دوست عزیز یکم مارو در جریان اینStore proceduree میذاری؟اصلا یه مثال ساده داری ببینیم؟تشکر

na3er-faraji
جمعه 26 شهریور 1389, 13:39 عصر
خير، بهتر است كد ها در SP باشند.

اما من دیتابیسم تو این برنامه اکسسه. توی برنامه هایی که sql هست از این روش استفاده نمی کنم. اما در اکسس که نمیشه از sp استفاده کرد چه باید کرد؟؟؟

Sirwan Afifi
جمعه 26 شهریور 1389, 14:55 عصر
سلام دوستان
اگه لطف کنید بفرمائید که SP چی هست ، در کجا باید از SP استفاده کنیم، نحوه ی استفاده و ... رو توضیح بدید ممنون میشم

na3er-faraji
جمعه 26 شهریور 1389, 15:54 عصر
دوست عزیز یکم مارو در جریان اینStore proceduree میذاری؟اصلا یه مثال ساده داری ببینیم؟تشکر



سلام دوستان
اگه لطف کنید بفرمائید که SP چی هست ، در کجا باید از SP استفاده کنیم، نحوه ی استفاده و ... رو توضیح بدید ممنون میشم

SP مخفف Stored Procedure است. و یک سری روال ذخیره شده است که فقط به وسیله نام فراخوانی می شوند. برای ساخت هم کافیه مانند عکس ضمیمه شده عمل کنید.

این هم یک SP که من برای نمونه نوشتم.


CREATE PROCEDURE dbo.AddNewProduct
(
@productName nvarchar(50),
@comment nvarchar(250),
@price nvarchar(20),
@picAddress nvarchar(250),
@groupID int
)
AS
INSERT INTO tblProduct(ProductName,Comment,Price,PicAddress,Gr oupID)
VALUES(@productName,@comment,@price,@picAddress,@g roupID)
RETURN


کار این SP اینه که یک سری اطلاعات رو میگیره و داخل یک جدول ذخیره میکنه. برای سایر کارها هم میشه از این روال ها استفاده کرد. مثل Delete,Insert,...

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

این هم نحوه فراخوانی این SP از داخل برنامه.

لایه UI


protected void btnAddUser_Click(object sender, EventArgs e)
{
BLL.Users users = new BLL.Users();
int reVal = users.AddNewUser(txtFirstName.Text, txtLastName.Text, txtUserName.Text, txtPassword.Text, txtEmail.Text, txtTel.Text, txtAddress.Text);

if (reVal == 1)
lblMassage.Text = "آدرس ایمیل قبلا ثبت شده است";

if (reVal == 2)
lblMassage.Text = "نام کاربری قبلا ثبت شده است";

if (reVal == 0)
lblMassage.Text = "ثبت نام شما با موفقیت انجام گرفت";


}


لایه BLL


public int AddNewUser(string firstName, string lastName, string userName, string password, string email, string tel, string address)
{
DAL.Users users = new DAL.Users();
int reVal = 0;

if (users.GetUserCountByEmail(email)!=0)
{
reVal = 1; //ایمیل قبلا ثبت شده است

}
if (reVal==0 && users.GetUserCountByUserName(userName)!=0)
{
reVal = 2; //نام کاربری قبلا ثبت شده است
}
if (reVal==0)
{
users.AddNewUser(firstName, lastName, userName, password, email, tel, address);

}
return reVal;
}


لایه DAL


public int AddNewUser(string firstName, string lastName, string userName, string password, string email, string tel, string address)
{
return ExecuteNoneQuery(System.Data.CommandType.StoredPro cedure,"AddNewUser",new SqlParameter[]{

new SqlParameter("@firstName",firstName),
new SqlParameter("@lastName",lastName),
new SqlParameter("@userName",userName),
new SqlParameter("@password",password),
new SqlParameter("@email",email),
new SqlParameter("@tel",tel),
new SqlParameter("@address",address)
});


}

و در نهایت کلاس DALBase فراخوانی میشه.


public int ExecuteNoneQuery(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = commandType;
cmd.CommandText = commandText;
cmd.Parameters.AddRange(commandParameters);
con.Open();

int retVal = cmd.ExecuteNonQuery();

con.Close();

return retVal;

}
}

صباح فتحی
جمعه 26 شهریور 1389, 17:31 عصر
خیلی عالی بود واقعا دکمهhttp://www.barnamenevis.org/forum/images/buttons/post_thanks.gif هم کمه.. (http://www.barnamenevis.org/forum/post_thanks.php?do=post_thanks_add&p=1101106&securitytoken=1284730022-eb7325670bab13bf6bfa39a33c80bc0e37dd9f2f)
خب حالا میگید دلیل استفاده از sp چیه؟چه مزایایی داره

na3er-faraji
جمعه 26 شهریور 1389, 18:02 عصر
خب حالا میگید دلیل استفاده از sp چیه؟چه مزایایی داره

سرعت بیشتر به خاطر اینکه SP ها فقط یک بار کامپایل میشند, خوانایی بیشتر برنامه به خاطر اینکه دیگه کد SQL داخل برنامه وجود نداره و خطایابی سریعتر برنامه و ...

shima2006
جمعه 26 شهریور 1389, 18:04 عصر
جناب Swi من هم ازتون متشکرم
من هم میخوام جواب سوالی رو که جناب صباح پرسیدن رو بودنم و هم این که آیا این برنامه ای که شما نوشتین لایه 3 بود؟

na3er-faraji
جمعه 26 شهریور 1389, 18:08 عصر
من هم میخوام جواب سوالی رو که جناب صباح پرسیدن رو بودنم

پست 11 رو مطالعه کنید


و هم این که آیا این برنامه ای که شما نوشتین لایه 3 بود؟
بله.

از دوستان کسی نگفت برای اکسس که SP نداره چیکار کنیم ؟؟؟؟