PDA

View Full Version : سوال: مشكل در ايجاد شرط



akarsu
دوشنبه 27 اردیبهشت 1389, 01:16 صبح
با سلام خدمت دوستان
من در sql دوتا table ايجاد كردم به نامهاي chek , hesab
و در جدول chek اطلاعات زير ذخيره ميشه:
tarikh
name bank
price
و در جدول hesab اطلاعات زير ذخيره ميشه:
name
mojodi
ميخوام شرطي بنويسم كه وقتي tarikh=textBox1.Text شد و name=name bank شد
price رو به mojodi اضافه كنه
اگه كمك كنيد ممنون ميشم.:ناراحت:

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 08:15 صبح
سلام.
دوست عزیز نوع فیلد های جدولتون چیه؟ string,int,...

akarsu
دوشنبه 27 اردیبهشت 1389, 10:28 صبح
دوست عزيز
nvarchar

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 11:26 صبح
سلام
چرا فیلد های price,mojodi رو از نوع عددی انتخاب نکردید که توی خود sql بشه این کارو انجام داد و نیاز نباشه که در سی شارپ اینکارو کرد از StpredPrpceduer استفاده می کنید؟ به هر حال کدی که به نظر من می رسه اینه

SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=yourdatabase;Integrated Security=True");
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.CommandText = "select * from chek,hesab where tarikh='" + textBox1.Text + "' and name=name_bank";
adapter.SelectCommand.Connection = con;
DataSet hesab = new DataSet();
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Fill(hesab);
int mojodi = Convert.ToInt16(hesab.Tables[0].Rows[0]["mojodi"].ToString());
mojodi += Convert.ToInt16(hesab.Tables[0].Rows[0]["price"].ToString());
SqlCommand command = new SqlCommand("update hesab set mojodi='" + Convert.ToString(mojodi) + "' where name='" + hesab.Tables[0].Rows[0]["name"].ToString() + "'", con);
con.Open();
command.ExecuteNonQuery();
con.Close();



امیدروارم مشکلتون رو حل کنه .این کد مشکل رو حل میکنه ولی مطمئن نیستم که راه حل اصولی باشه
موفق باشید

akarsu
دوشنبه 27 اردیبهشت 1389, 12:16 عصر
خيلي ممنون دوست عزيز
اما فقط در خط
adapter.Fill(hesab);
error
ميده
اگه اينجا بازم كمك كني ممنون ميشم

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 12:54 عصر
سلام .
اسم دیتابیستون چیه؟اونوبه جای "yourdatabase" گذاشتید؟از sql برای ساخت دیتابیستون استفاده کردید؟
Update : مشکل باید از دستور select باشه فیلدها رو چک کن ببین اسمشون همونی باشه که خودت در بانکت نوشتی
موفق باشی

akarsu
دوشنبه 27 اردیبهشت 1389, 13:31 عصر
شرمنده دارم مزاحم ميشم
اين data base mane
كه گذاشتم
http://www.barnamenevis.org/forum/attachment.php?attachmentid=49128&stc=1&d=1274088538
و كدي رو كه لطف كرده بودي رو اينجوري نوشتم


SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Db_Ketab;Integrated Security=True");
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand();
adapter.SelectCommand.CommandText = "select * from cheak,hesab where Isbn='" + textBox1.Text + "' and name_bank=namebank";
adapter.SelectCommand.Connection = con;
DataSet hesab = new DataSet();
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Fill(hesab);
int mojodihesab = Convert.ToInt16(hesab.Tables[0].Rows[0]["mojodihesab"].ToString());
mojodihesab += Convert.ToInt16(hesab.Tables[0].Rows[0]["price_cheak"].ToString());
SqlCommand command = new SqlCommand("update hesab set mojodihesab='" + Convert.ToString(mojodihesab) + "' where namebank='" + hesab.Tables[0].Rows[0]["namebank"].ToString() + "'", con);
con.Open();
command.ExecuteNonQuery();
con.Close();

و حالا هم error واسه
int mojodihesab = Convert.ToInt16(hesab.Tables[0].Rows[0]["mojodihesab"].ToString());
ميگيره
واقها شرمنده

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 14:23 عصر
سلام .
من بانکتون رو نگاه کردم یک ایرادی که داره اینه که توی فیلد price_cheak به جای وارد کردن عدد , حروف وارد کردید
Update : چون عدد هاتون بزرگتر از بازهint16 هست از int64 در convert استفاده کنید

int mojodihesab = Convert.ToInt64(hesab.Tables[0].Rows[0]["mojodihesab"].ToString());
بازم اگه مشکلی بود در خدمتم
موفق باشید

akarsu
دوشنبه 27 اردیبهشت 1389, 14:32 عصر
اونم درست كردم مشكلم اينه كه در خط


int mojodihesab = Convert.ToInt16(hesab.Tables[0].Rows[0]["mojodihesab"].ToString());

در قسمت Row ايراد ميگيره
.

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 14:44 عصر
اونم درست كردم مشكلم اينه كه در خط


int mojodihesab = Convert.ToInt16(hesab.Tables[0].Rows[0]["mojodihesab"].ToString());

در قسمت Row ايراد ميگيره
اينم عكس ايراده.
سلام.
ببخشید یادم رفته بود شرط خالی بودن hesab.table[0] رو چک کنم
کد رو به این صورت اصلاح کنید

if (hesab.Tables[0].Rows.Count != 0)
{
int mojodihesab = Convert.ToInt16(hesab.Tables[0].Rows[0]["mojodihesab"].ToString());
string stprice = hesab.Tables[0].Rows[0]["price_cheak"].ToString();
int price = Convert.ToInt16(hesab.Tables[0].Rows[0]["price_cheak"].ToString());
mojodihesab += price;
SqlCommand command = new SqlCommand("update hesab set mojodihesab='" + Convert.ToString(mojodihesab) + "' where namebank='" + hesab.Tables[0].Rows[0]["namebank"].ToString() + "'", con);
con.Open();
command.ExecuteNonQuery();
con.Close();
}

بازم اگه مشکلی بود بپرسید
موفق باشید
Udate : اگر مشکلتون حل شده اعلام کنید که وقتی دیگران به این تاپیک مراجعه می کنند به جواب برسند.ممنون

akarsu
دوشنبه 27 اردیبهشت 1389, 16:53 عصر
و يك مشكل كوچيك
اگه در database من 2 تا رديف از اطلاعات باشه
يعني هم تاريخ يكي باشه و هم نام بانك
در اين صورت فقط اولي رو اضافه ميكنه
چطور كد رو تغيير بدم تا هر چندتا بود اضافه كنه

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 17:29 عصر
کد رو به این صورت تغییر بدید


if (hesab.Tables[0].Rows.Count != 0)
{
int mojodihesab= Convert.ToInt16(hesab.Tables[0].Rows[0]["mojodihesab"].ToString;
for(int i=0;i<hesab.Tables[0].Rows.Count;i++)
{

int price = Convert.ToInt16(hesab.Tables[0].Rows[i]["price_cheak"].ToString());
mojodihesab += price;
}
SqlCommand command = new SqlCommand("update hesab set mojodihesab='" + Convert.ToString(mojodihesab) + "' where namebank='" + hesab.Tables[0].Rows[0]["namebank"].ToString() + "'", con);
con.Open();
command.ExecuteNonQuery();
con.Close();
}
Update : کد اصلاح شد اینو دوباره امتحان کنید

akarsu
دوشنبه 27 اردیبهشت 1389, 17:44 عصر
اين دستور اولين مقدار رو وقتي پيدا كرد بعد از اضافه كردن به mojodihesab دوباره وقتي حلقه چرخش پيدا ميكنه بازهم همين مقدار رو به mojodihesab اضافه ميكنه اين دستور به تعداد سطرها در جدول اين كارو ميكنه بجاي اينكه اين كار رو يكبار انجام بده و مقدار دوم رو استفاده نميكنه

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 17:50 عصر
میشه واضح تر بگین که چکار می خواهید انجام بدید

akarsu
دوشنبه 27 اردیبهشت 1389, 17:56 عصر
من ميخوام كه فقط يك بار اين مقدار رو اضافه كنه ولي با اين دستور به تعداد سطرهاي جدول اين مقدار رو به موجودي اضافه ميكنه يعني
اگر در جدول مثلا 2 رديف اطلاعات وجود داشته باشد كه تاريخ و نام بانك هر دوي انها يكي ولي مقدارشان متفاوت باشد مثلا اولي 100 دومي 50 بود
150 رو به موجودي اضافه كنه
اما با اين دستور چون 2 رديف اطلاعات در جدول وجود دارد مقدار 100 رو 2 با اضافه ميكنه يعني 200
و كاري به كاره مقداره دوم نداره

akarsu
دوشنبه 27 اردیبهشت 1389, 18:24 عصر
دستور تازه‌اي كه گفتي اين ايراد و ميده

amir.khanlari
دوشنبه 27 اردیبهشت 1389, 19:03 عصر
دستور for رو به این صورت اصلاح کنید

for(int i=0;i<hesab.Tables[0].Rows.Count;i++)
پاورقی : ببخشید که کد ها خطا دارن

akarsu
دوشنبه 27 اردیبهشت 1389, 19:08 عصر
تمام دستور100%درست كار كرد
خيلي ممنون :تشویق::لبخندساده: