PDA

View Full Version : مشکل در وارد کردن سطرهای گریدی که به جدول بایند نیست در بانک؟



نیما حتمی
چهارشنبه 17 فروردین 1390, 15:21 عصر
با سلام

من یه گرید دارم که به هیچ جدولی در بانکم بایند نیست.کار به این صورت است که کاربر در گرید اطلاعات رو سطر به سطر پر می کنه بعد با زدن دکمه ذخیره این اطلاعات در بانک ذخیره می شه.من اینطوری کدمو نوشتم و لی اررور زیرو می ده.

SqlDataAdapter d = new SqlDataAdapter("Insert into EmissionDoc (NumReceipt,AccCode,Center1)values('" + textBox1.Text + "','" + dataGridView1.Rows[i].Cells[1].Value.ToString() + "','" + dataGridView1.Rows[i].Cells[2].Value.ToString() + "')", connect);
DataTable t = new DataTable();
d.Fill(t);

ارروری که می ده:68379

کارم خیلی لنگه بچه ها کمکم کنید

shadi khanum
چهارشنبه 17 فروردین 1390, 18:44 عصر
یه چیزی توی این کد که استفاده کردید nothing که این Error رو میده که احنمالا Selectcommand دیتاآداپرتون nothing. ضمنا شما گفتید اطلاعات تو گرید به جایی بایند نیست پس اون دستور da.fill(t) رو واسه چی نوشتین ؟ دستور fill واسه وقتی که بخواین اطلاعاتی رو از جدولی بخونید و توی یه دیتاتیبل بریزید. شما dataadapter نمیخواید و به نظر من تو یه for یک یکی ردیفهای گرید رو بخونید و یه SqlCommand تعریف کنید و دستور insertتون رو توی Commandtext اون بنویسید و commandتون رو Executenonquery بکنید

نیما حتمی
پنج شنبه 18 فروردین 1390, 18:48 عصر
میشه مثالی بزنین؟

doostl
پنج شنبه 18 فروردین 1390, 19:08 عصر
ببين اقا نيما

من متغير i رو ميبينم ولي دستور ++i رو که نشانگر رفتن به خط بعديه رو نميبينم شايد اشکال از اونه ولي به طور کلي مي توني از ديتا بيس استفاده کني که خيلي راحت تره اگر هم مي خواي به همين روش ادامه بدي مي توني با چک پوينت خيلي راحت ارور يابي کني... اگه بلدي که هيچ اگه نه يه درخاست بده برات روششو بزارم چون يکم ديرم شده.

نیما حتمی
پنج شنبه 18 فروردین 1390, 20:01 عصر
سلام دوست عزیز کل کد من اینه:
SqlConnection connection= new SqlConnection(@"server=saeed\software;trusted_connection=yes;datab ase=saeed");
try
{
connection.Open();
for(int i=0;i<=dataGridView1.Rows.Count;i++)
{
string sql = "Insert Into Table_1 (ID,Name) Values (@ID,@Name)";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.AddWithValue("Id",dataGridView1.Rows[i].Cells[0].Value.ToString());
cmd.Parameters.AddWithValue("Name", dataGridView1.Rows[i].Cells[1].Value.ToString());
cmd.ExecuteNonQuery();
}
}
catch (Exception exp)
{
MessageBox.Show(exp.Message.ToString());
}
finally
{
connection.Close();
}
ممنون میشم اگه کمکی کنین؟

RIG000
پنج شنبه 18 فروردین 1390, 20:58 عصر
cmd.Parameters.AddWithValue("@Id",dataGridView1.Row s[i].Cells[0].Value.ToString());
cmd.Parameters.AddWithValue("@Name", dataGridView1.Rows[i].Cells[1].Value.ToString());

نیما حتمی
جمعه 19 فروردین 1390, 12:09 عصر
دوست عزیز اینی که شما نوشتین همونیه که خودم نوشتم!من مشکل ارووری که در بالا نوشتمو دارم سیستم موقع insert اررور بالا رو می ده اگه میشه واضح تر توضیح بدین.ممنونم

RIG000
جمعه 19 فروردین 1390, 12:51 عصر
cmd.Parameters.AddWithValue("@Id"


cmd.Parameters.AddWithValue("@Name"

نیما حتمی
شنبه 20 فروردین 1390, 09:10 صبح
دوست عزیز حل نشد.دوستان کسی نیست بتونه کمکی کنه؟

shahab_software
شنبه 20 فروردین 1390, 12:39 عصر
توی دستور حلقه از count یکی کم کنید. dataGridView1.Rows.Count-1
البته اگر دستورات قبلی کاملا درست باشن باید اطلاعات توی بانک دخیره می شدند و اخطار هم زده می شد! اینطوری بود؟ اگر فقط اخطار می زد بگید تا یه نمونه برنامه براتون بزارم.

RIG000
شنبه 20 فروردین 1390, 12:53 عصر
--------------------------------------------

نیما حتمی
شنبه 20 فروردین 1390, 13:22 عصر
سلام
ببین دوست عزیز من میخوام کاربر ابتدا یک سطر یا دوسطر و یا ...در گرید تایپ کنه سپس با زدن دکمه ذخیره این سطرها هر چندتا سطر که هست بره تو جدول هم به همون تعداد سطر ذخیره بشه.من هر کاری می کنم ارور بالا رو می ده.نمونه کد کامل داری بدی؟ممنون میشم

shahab_software
شنبه 20 فروردین 1390, 14:07 عصر
توی حلقه کاری که گفتم را انجام دادید؟ شما از صفر تا تعداد سطرها، دارید اطلاعات ارسال می کنید. مثلا اگر 4 تا سطر داشته باشید شما از صفر تا 4 دارید ارسال می کنید که می شه 5 تاسطر! وقتی می رسه به عدد آخر می بینه اطلاعاتی وجود نداره برای همین این اخطار رو می زنه
شما توی شرط حلقه یکی کم کنید. اگر باز اخطار داد بفرمایید تا نمونه برنامه براتون بزارم.

نیما حتمی
شنبه 20 فروردین 1390, 14:12 عصر
بله کم کردم الان دیگه هیچی insert نمی کنه اینم کدم:

SqlConnection connect = new SqlConnection();
connect.ConnectionString = Total.Properties.Settings.Default.Connection.ToStr ing();
for (int i = dataGridView1.Rows.Count - 1; i <= 0; i--)
{
try
{
connect.Open();
string s = "Insert into EmissionDoc (Id,NumReceipt,AccCode,Center1)values(@Id,@NumRece ipt,@AccCode,@Center1)";
SqlCommand Cmd = new SqlCommand(s, connect);
Cmd.Parameters.AddWithValue("Id", Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value.ToString()));
Cmd.Parameters.AddWithValue("NumReceipt", Convert.ToInt32(textBox1.Text));
Cmd.Parameters.AddWithValue("AccCode", dataGridView1.Rows[i].Cells[1].Value.ToString());
Cmd.Parameters.AddWithValue("Center1", dataGridView1.Rows[i].Cells[2].Value.ToString());
Cmd.ExecuteNonQuery();

}
catch (Exception exp)
{
MessageBox.Show(exp.Message.ToString());
}
finally
{
connect.Close();
}
}

shahab_software
شنبه 20 فروردین 1390, 14:41 عصر
خب با حلقه ای که شما نوشتید نباید هم چیزی insert کنه! ببینید دوست من، شمارنده حلقه را برابر تعداد سطرها کردی و تا وقتی کوچکتر از صفره دستورات اجرا می شن. خب معلومه اگر دیتاگردویو توش اطلاعات باشه این حلقه هم اجرا نمی شن.
نیما جان شما از کد زیر استفاده کنید. جواب می گیرید:


SqlConnection connect = new SqlConnection();
connect.ConnectionString = Total.Properties.Settings.Default.Connection.ToStr ing();
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
try
{
connect.Open();
string s = "Insert into EmissionDoc (Id,NumReceipt,AccCode,Center1)values(@Id,@NumRece ipt,@AccCode,@Center1)";
SqlCommand Cmd = new SqlCommand(s, connect);
Cmd.Parameters.AddWithValue("Id", Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value.ToString()));
Cmd.Parameters.AddWithValue("NumReceipt", Convert.ToInt32(textBox1.Text));
Cmd.Parameters.AddWithValue("AccCode", dataGridView1.Rows[i].Cells[1].Value.ToString());
Cmd.Parameters.AddWithValue("Center1", dataGridView1.Rows[i].Cells[2].Value.ToString());
Cmd.ExecuteNonQuery();

}
catch (Exception exp)
{
MessageBox.Show(exp.Message.ToString());
}
finally
{
connect.Close();
}
}

نیما حتمی
شنبه 20 فروردین 1390, 14:46 عصر
خیلی ممنونم که وقتت رو در اختیار من گذاشتی.این کدی که شما دادین هم جواب نمی ده و پیغام زیرو می ده:68487

shahab_software
شنبه 20 فروردین 1390, 15:07 عصر
بفرمایید این هم یه نمونه ساده:

68489

اگر باز ارور داد احتمالا از تبدیل هایی که انجام می دید هست. می تونید یه کاری بکنید. try catch رو بردارید ببینید کدام دستور ارور میده.

نیما حتمی
یک شنبه 21 فروردین 1390, 08:46 صبح
دوست عزیز یه نگاه به این برنامه بنداز query جدولشم نوشتم تو sql اجرا کن و برنامه رو اجرا کن ببین ارور از چیه؟ببین فقط طریقه کار به این صورته که ما حتما باید دو سند بزنیم برنامه حسابداری دوبله بعد از زدن دو سند دکمه ذخیره رو می زنیم که ارور:68522شما سطرها رو دستی پر کنین

این هم فرم به همراه جدولش نام بانکتم بزارtotal

http://barnamenevis.org/images/misc/pencil.pngممنونم

shahab_software
یک شنبه 21 فروردین 1390, 12:34 عصر
قسمت دیزاینر فرمی که گذاشته بودید بعد از اد کردن فرم نمی اومد. برای همین نشد تستش کنم.
ببینید دوست من، بعد از اینکه این اخطار زده می شه آیا اطلاعاتی هم توی بانک دخیره می شه؟ اخطار از کدام دستوره؟

نیما حتمی
یک شنبه 21 فروردین 1390, 13:06 عصر
دوست عزیز مشکل اینجاست که موقع insert اگه کاربر فیلدی رو وارد نکنه بعد دکمه ذخیره رو بزنه این پیغام ظاهر میشه.در واقع میگه باید تمام فیلدها پر بشن.من نمی خوام اینطوری باشه.در ضمن من در جدول تیک null رو برای همه فیلد هام زدم که null پذیر هم باشه ولی نمیشه که بشه:لبخندساده:

shahab_software
یک شنبه 21 فروردین 1390, 13:29 عصر
شما قبل از ارسال داده ها، آنها را هم تبدیل می کنید؟ مثلا یک سلول رشته را به اینت تبدیل می کنید؟

نیما حتمی
یک شنبه 21 فروردین 1390, 13:40 عصر
نه.هیچ تبدیلی انجام نمی شه