PDA

View Full Version : مبتدی: درخواست برطرف کردن کد ویرایش و جستجو از دیتا بیس.



rayson
سه شنبه 08 مرداد 1392, 19:30 عصر
سلام دوستان.
از آنجای که بحث چهار فعالیت اصلی( درج ، حذف ، ویرایش ، جستجو ) در کار برنامه نویسی مهم است ، من بر این فکر تمام تاپیک های موجود در سایت و چند سایت دیگر را چک کردم و سعی بر پیدا کردن کوتاه ترین و در واقع مناسب ترین کد کردم.
برای بخش ثبت و حذف تونستم به نتیجه برسم اما دو بخش دیگر که ویرایش و جستجو هست با مشکلاتی روبرو شدم.
بخش ویرایش به سبکی که خودم خواستم اجرا بشه کد زیر تونستم از دل کد های دیگر پیدا کنم ( جنیدین روش بود که این را انتخاب کردم).
اما کد بعد از ویرایش اطلاعات کل دیتا بیس را ویرایش میکند نه فقط فیلد انتخاب شده.

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\data computer.org\Documents\Visual Studio 2010\Projects\SNM\SNM\sm.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand com = new SqlCommand();
com.CommandText = "UPDATE sal SET add_sal=@add_sal";
com.Parameters.AddWithValue("add_sal", txt_sal.Text);
com.Connection = con;
con.Open();
com.ExecuteNonQuery();
con.Close();
refresh_DGV();


در کد جستجو چنین کدی است که فقط رشته را جستجو میکند ولی نوع داده من اینتیجر است و روشی برای تبدیل آن پیدا نکردم.

DataTable dt = new DataTable();
DataView dv = new DataView(dt);
dv.RowFilter = string.Format("add_sal LIKE '%(0)%'", txt_search.Text);
dgv_sal.DataSource = dv;

ممنون میشم اگر بهترین راه را برای من ایجاد کنید .
با تشکر.

rayson
چهارشنبه 09 مرداد 1392, 14:21 عصر
به نظر من بهتره در یک تابع قرار بدید تا هم آسان باشه و هم قابل فهم. به زودی تاپیکی در این رابطه ایجاد می کنم تا این مشکل حل بشه

سلام ، فکر نکنم که کد بالا زیاد گیج کننده باشد. اگر میشه مشکل کدهای من را بگید.
با تشکر.

Ghaem66
چهارشنبه 09 مرداد 1392, 14:30 عصر
اما کد بعد از ویرایش اطلاعات کل دیتا بیس را ویرایش میکند نه فقط فیلد انتخاب شده.

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\data computer.org\Documents\Visual Studio 2010\Projects\SNM\SNM\sm.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand com = new SqlCommand();
com.CommandText = "UPDATE sal SET add_sal=@add_sal";
com.Parameters.AddWithValue("add_sal", txt_sal.Text);
com.Connection = con;
con.Open();
com.ExecuteNonQuery();
con.Close();
refresh_DGV();


خب شرطش کو؟ شما شرطشو نذاشتین که ویرایش رو کدوم رکورد اعمال بشه. بخاطر همین همه رکوردا رو ویرایش میکنه.

update sal set add_sal=@add_sal WHERE "شرط"

rayson
چهارشنبه 09 مرداد 1392, 17:16 عصر
زمانی که داشتم بخش دوم که جستجو هست را چک میکردم احساس کردم کد DataTable را باید رویش اعمالی انجام میدادم ( فکر کنم اطلاعات دیتا بیس را روی آن قرار میدادم ) که هنگامی که با تکست جستجو عمل جستجو را بخواهم انجام دهم ، خود کار مقایسه و فیلتر را انجام دهد ، الان نقش DataTable در اینجا خنثی است.
کسی از دوستان اگر نظری دارد به من بگوید .
با تشکر.

sohil_ww
چهارشنبه 09 مرداد 1392, 17:40 عصر
اول از همه سئوال اولت


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

و این هم کد شما
com.CommandText = "UPDATE sal SET add_sal=@add_sal";

برای دستور آپدیت
باید به دیتابیسمون بگیم که می خوایم کدوم ستون را ویرایش کنیم
یعنی به دستور شما باید یک شرط اضافه بشه (where) که مشخص کنه کدامین ستون می خواید آپدیت کنید
برای مثال
com.CommandText = "UPDATE sal SET add_sal=@add_sal where ID=younumber

و سئوال دومت

در کد جستجو چنین کدی است که فقط رشته را جستجو میکند ولی نوع داده من اینتیجر است و روشی برای تبدیل آن پیدا نکردم.

حقیقتش برای خود من تا حالا پیش نیامده که 1 عدد با کمک like سرچ بزنم اگه چند لحظه صبر کنی سعی می کنم برات 1 نمونه آماده کنم

با تشکر
سهیل !

rayson
چهارشنبه 09 مرداد 1392, 20:02 عصر
سلام به دوستان.
ایشاالله که افطار کرده باشید و پر جون شده باشید :)
کسی از دوستان در مورد جستجو اعداد نمیتونه من را راهنمایی کنه ؟:(

shahryari
چهارشنبه 09 مرداد 1392, 20:09 عصر
سلام
کد جستجوی پست اول را به شکل زیر تغییر بده
DataTable dt = new DataTable();
DataView dv = new DataView(dt);
dv.RowFilter = string.Format("add_sal ={0}", int32.parse(txt_search.Text));
dgv_sal.DataSource = dv;

rayson
چهارشنبه 09 مرداد 1392, 20:45 عصر
سلام دوست من .
من تغییرات ایجاد کردم ولی به نتیجه نرسیدم.
کد من برای جستجو به این صورت است :
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\data computer.org\Documents\Visual Studio 2010\Projects\SNM\SNM\sm.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("select * from sal ", con);
SqlCommand com = new SqlCommand();
con.Open();
com.Connection = con;
da.Fill(dt);
con.Close();
//---------------------

DataView dv = new DataView(dt);
dv.RowFilter =string.Format("add_sal={0}",Int32.Parse(txt_search.Text));
dgv_sal.DataSource = dv;


ممون

sohil_ww
چهارشنبه 09 مرداد 1392, 20:52 عصر
سلام
کد جستجوی پست اول را به شکل زیر تغییر بده
DataTable dt = new DataTable();
DataView dv = new DataView(dt);
dv.RowFilter = string.Format("add_sal ={0}", int32.parse(txt_search.Text));
dgv_sal.DataSource = dv;


ایشان می خوان از دستور like در جستجو استفاده کنن !
فکر نکنم منظورشون این بوده باشه !

Ghaem66
چهارشنبه 09 مرداد 1392, 21:07 عصر
میشه یه توضیحی بدین که جستجوتون چه کاری رو انجام میده و دقیقا چی میخواین؟ نوع فیلدتون تو دیتابیس چطوریه؟

davidrobert
چهارشنبه 09 مرداد 1392, 21:07 عصر
سلام من یه فایل کمکی درست کردم بدردت بخوره http://barnamenevis.org/showthread.php?409640-%DB%8C%D8%A7%D8%AF-%D8%AF%D9%87%DB%8C-%DA%A9%D8%AF-%D9%87%D8%A7%DB%8C-%D8%A8%D8%AF%D8%B1%D8%AF-%D8%A8%D8%AE%D9%88%D8%B1-%D9%88-%D8%A7%D8%B5%D9%84%DB%8C-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&p=1826025#post1826025
من تو این فایل کمکی ذخیره کردن اطلاعات رو قرار دادم و قسمت دارم ویرایش کردن اطلاعات و کلی از امکنات دیگخ که نوشتم اضافه کنم.
این کد برای جستجو کردن.
http://uplod.ir/epsihxw748yb/CSharpDataBase.zip.htm
بفرمایید این 2 نوع کد برای جستجو اطلاعات داخل دیتاگرید ویو. کد نحوه جستجو عدد و رشته هستش برای جستجو به وسیله کامبوباکس و تکس باکس مقدار رو با کامبوباکس انتخاب و با تکس باکس جسنجو میکنی.
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
DataSet ds = new DataSet();
void search()
{
string query = null;
try
{
switch (comboBox1.Text)
{
case "نام": { query = "select * from Table1 where name like N'%" + textBox1.Text + "%'"; break; }
case "نام خانوادگی": { query = "select * from Table1 family like N'%" + textBox1.Text + "%'"; break; }
case "سال": { query = "select * from Table1 where convert (varchar,year) like N'%" + textBox1.Text + "%'"; break; }
default: { break; }
}
cmd.CommandText = query;
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
da.SelectCommand = cmd;
ds.Clear();
da.Fill(ds, "t1");
dataGridView1.DataSource = ds.Tables[0];
}
catch
{

}
}
public void searchreacorde()
{
if (textBox1.Text != string.Empty)
{
switch (comboBox1.Text)
{
case "نام":
{
cmd.CommandText = "select * from Table1 where name like N'%" + textBox1.Text + "%'"; da.SelectCommand = cmd;
da.Fill(dt);
}
break;
case "نام خانوادگی":
{
cmd.CommandText = "select * from Table1 where family like N'%" + textBox1.Text + "%'"; da.SelectCommand = cmd;
da.Fill(dt);
}
break;
case "سال":
{
cmd.CommandText = "select * from Table1 where (convert,year) like N'%" + textBox1.Text + "%'"; da.SelectCommand = cmd;
da.Fill(dt);
}
break;
}
dataGridView1.DataSource = dt;
}
else if (textBox1.Text == string.Empty)
{
dt.Clear();
}
}


اینم دستور برای صدا زدن مقدار جستجو.
private void textBox1_TextChanged(object sender, EventArgs e)
{
search();
//searchreacorde();
}

rayson
چهارشنبه 09 مرداد 1392, 21:21 عصر
میشه یه توضیحی بدین که جستجوتون چه کاری رو انجام میده و دقیقا چی میخواین؟ نوع فیلدتون تو دیتابیس چطوریه؟ سلام.
من میخوام سال را جستحو کنم.
نوع فیلد آن دز جدول از نوع اینتیجر است.
همانطور که دوست من سهیل گفت من قصد دارم با دستور LIKE این کار را انجام بدم ، اما در کل من دستور آقای شهریاری هم جایگزین کردم که به نتیجه نرسیدم.(البته اگر بدون لایک با همین سبک هم باشه مشکلی ندارم)
همانطور که در پست اول گفتم من این روش را از بین روش های دیگر جستجو برگزیدم ، اقای David ممنون ولی من در این سبک جستجو به کمک نیاز دارم.

ویرایش: ببینید ، اطلاعات درون جدول در دیتاگرید نمایش داده میشود یک تکست Txt_search.text کار جستجو در این جدول را انجام میدهد و داده های مشابه با تکست را درون همان دیتاگرید نمایش میدهد.

با تشکر .

sohil_ww
چهارشنبه 09 مرداد 1392, 21:46 عصر
تا اونجایی که من می دونم نمیشه از دستور like برای نوع داده ای int استفاده کرد (اگه اشتباه می کنم لطفا دوستان اصلاح کنن )

davidrobert
چهارشنبه 09 مرداد 1392, 23:07 عصر
سلام اول به دوست عزیزم آقا sohil ارز کنیم بله میشه int و به صورت like جستجو کرد. وقتی به این صورت معرفی کنید دستور رو برای عدد میشه به صورت LIKE هم مقدار رو گشت که شبیه همون عدد باشد.

."select * from Table1 where convert (varchar,year) like N'%" + textBox1.Text + "%'"
بفرمایید این هم سورس جستجو کردن هستش اگه مشکلی بود یا سوالی بود در خدمتیم.http://uplod.ir/jes0297p3g2e/WindowsFormsApplication4.rar.htm