PDA

View Full Version : درباره دستور select



pbiuki630
سه شنبه 03 شهریور 1388, 12:19 عصر
سلام
چه جوری میتونم برای شرط دستور select از متغیر استفاده کنم
یعنی همچین کدی را چه جوری باید نوشت؟

int i=1
da.selectcommand.commandtext= "select * from table1 where id=i"

M.YasPro
سه شنبه 03 شهریور 1388, 12:27 عصر
سلام
چه جوری میتونم برای شرط دستور select از متغیر استفاده کنم
یعنی همچین کدی را چه جوری باید نوشت؟

int i=1


da.selectcommand.commandtext= "select * from table1 where id=1"



string strSql = "select * from tbl where f1=" + var.Tostring();

Saeed.Masoumi
سه شنبه 03 شهریور 1388, 15:35 عصر
سلام دوست عزیز m.mosayebi
بهتر است از این روش استفاده نشود چون مشکل امنیتی به وجود می آید و احتمال Sql Injection رخ می دهد.
برای این کار بهتر است



int i = new int();
SqlConnection my_connection=new SqlConnection();
SqlCommand my_comm = new SqlCommand();
my_comm.CommandText = "select * from Table where id=@id";
my_comm.Connection = my_connection;
my_comm.Parameters.AddWithValue("@id",i);
my_connection.Open();
my_comm.ExecuteNonQuery();
my_connection.Close();
my_comm.Parameters.Clear();

M.YasPro
سه شنبه 03 شهریور 1388, 16:10 عصر
سلام دوست عزیز m.mosayebi
بهتر است از این روش استفاده نشود چون مشکل امنیتی به وجود می آید و احتمال Sql Injection رخ می دهد.
برای این کار بهتر است


حرفتو کامل قبول دارم ولی من فکر کردم که اون دوستمون سوالشو جوری پرسید که فکر کردم باید بهش ابتدایی پاسخ بدم .

sysman_20
سه شنبه 03 شهریور 1388, 17:01 عصر
سلام
چه جوری میتونم برای شرط دستور select از متغیر استفاده کنم
یعنی همچین کدی را چه جوری باید نوشت؟

int i=1

da.selectcommand.commandtext= "select * from table1 where id=i"




int i=1;
da.selectCommand.commandText="select * from table1 where id="+i.toString();

Open-Source
چهارشنبه 04 شهریور 1388, 12:32 عصر
سلام دوست عزیز m.mosayebi
بهتر است از این روش استفاده نشود چون مشکل امنیتی به وجود می آید و احتمال Sql Injection رخ می دهد.
برای این کار بهتر است



int i = new int();
SqlConnection my_connection=new SqlConnection();
SqlCommand my_comm = new SqlCommand();
my_comm.CommandText = "select * from Table where id=@id";
my_comm.Connection = my_connection;
my_comm.Parameters.AddWithValue("@id",i);
my_connection.Open();
my_comm.ExecuteNonQuery();
my_connection.Close();
my_comm.Parameters.Clear();






دوست عزیر میتونی در مورد این روش یه توضیحی بدی؟
به نظر من فرقی با روش قبل ندارد!
من همیشه از روش قبل استفاده میکردم و هنوز به مشکلی بر نخوردم.
این Sql Injection چه جوری در روش قبل رخ میدهد که در این روش رخ نمیدهد؟

:متفکر::متفکر::متفکر::متفکر:: تفکر:

Saeed.Masoumi
چهارشنبه 04 شهریور 1388, 21:22 عصر
سلام اینجا یک سر بزن تاپیک براش ایجاد کردم:
http://barnamenevis.org/forum/showthread.php?p=790709#post790709

Open-Source
پنج شنبه 05 شهریور 1388, 13:50 عصر
وقتی کدم رو به این صورت زیر مینویسم مشکلی ندارم:


oc.CommandText = "INSERT INTO tblBuyItem (NKala,Tedad,BahaVahed,BahaKol,BahaForoosh,FactorN O) VALUES ('"
+ dgvKala.Rows[i].Cells[0].Value.ToString() + "','"
+ dgvKala.Rows[i].Cells[1].Value.ToString() + "','"
+ dgvKala.Rows[i].Cells[2].Value.ToString() + "','"
+ dgvKala.Rows[i].Cells[3].Value.ToString() + "','"
+ dgvKala.Rows[i].Cells[4].Value.ToString() + "','"
+ txtFactorNo.Text + "')";




ولی وقتی به این صورت مینویسم:



oc.CommandText = "INSERT INTO tblBuyItem (NKala,Tedad,BahaVahed,BahaKol,BahaForoosh,FactorN O) VALUES (@i1,@i2,@i3,@i4,@i5,@i6)";
oc.Parameters.AddWithValue("@i1", dgvKala.Rows[i].Cells[0].Value.ToString());
oc.Parameters.AddWithValue("@i2", dgvKala.Rows[i].Cells[1].Value.ToString());
oc.Parameters.AddWithValue("@i3", dgvKala.Rows[i].Cells[2].Value.ToString());
oc.Parameters.AddWithValue("@i4", dgvKala.Rows[i].Cells[3].Value.ToString());
oc.Parameters.AddWithValue("@i5", dgvKala.Rows[i].Cells[4].Value.ToString());
oc.Parameters.AddWithValue("@i6", txtFactorNo.Text);



برنامه این error را میدهد:

You cannot add or change a record because a related record is required in table 'tblBuy'.

Open-Source
پنج شنبه 05 شهریور 1388, 13:52 عصر
لازم هست که بگم جدول tblBuyItem که بهش Add میکنم با جدول tblBuy ارتباط داره.

ولی نمیونم چرا تو حالت دوم erro میده؟!!!!!!!!!!!!!!!!!!

saeedr22
پنج شنبه 05 شهریور 1388, 14:46 عصر
سلام دوست عزیز m.mosayebi
بهتر است از این روش استفاده نشود چون مشکل امنیتی به وجود می آید و احتمال Sql Injection رخ می دهد.
برای این کار بهتر است



int i = new int();
SqlConnection my_connection=new SqlConnection();
SqlCommand my_comm = new SqlCommand();
my_comm.CommandText = "select * from Table where id=@id";
my_comm.Connection = my_connection;
my_comm.Parameters.AddWithValue("@id",i);
my_connection.Open();
my_comm.ExecuteNonQuery();
my_connection.Close();
my_comm.Parameters.Clear();





به نظر من تو این روشی هم که شما فرمودین بازم امکان sqlinjection هستش.
sqlenjiction تغریباً فقط با stored procedure بی معنی میشه.

اوبالیت به بو
جمعه 06 شهریور 1388, 14:39 عصر
به نظر من تو این روشی هم که شما فرمودین بازم امکان sqlinjection هستش.
خير.
اگر با روش Parameters كسي SQL Injection رو ديده بگه.

Open-Source
جمعه 06 شهریور 1388, 14:52 عصر
کسی نیست جواب ما رو بده.

ما اومدیم از این SQL Injection راحت بشم از همون کد خودمون هم وراومدیم.

(پست من صفحه قبل هست).