PDA

View Full Version : سوال در مورد وارد کردن اطلاعات در دیتابیس



sanaz.ebrazeh
دوشنبه 28 مهر 1393, 09:43 صبح
سلام خسته نباشید
من یک فرم ورود اطلاعات دارم با یه دیتا گرید وقتی دکمه add رو میزنم اطلاعات رو به صورت علامت سوال وارد دیتاگرید میکنه این مشکل اولمه
و مشکل دوم اینه که وقتی دیتابیس رو باز میکنم اصلا چیزی توش وارد نشده فقط داخل دیتا گرید نشونش میده مشکل کجاس؟

من با اسکیول اکسپرس خود ویژوال استدیو کار میکنم

SqlConnection cn = new SqlConnection();
SqlCommand cm = new SqlCommand();
cn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=F:\projeh\var zesh\varzesh\varzesh\Database1.mdf;Integrated Security=True;User Instance=True";
cm.Connection = cn;
cm.CommandText = "INSERT INTO tolidlavazemotajhizatvarzeshee (id,nv,mfaliyat,nm,web,email,ostan,shahr,neshani,t el,facs,saltasis,sabt,iso,hamrah)VALUES('" + textBox1id.Text + "','" + textBox2nv.Text + "','" + textBox3faaliyat.Text + "','" + textBox4nm.Text + "','" + textBox5web.Text + "','" + textBox6email.Text + "','" + textBox7ostan.Text + "','" + textBox8shahr.Text + "','" + textBox9neshani.Text + "','" + textBox10tel.Text + "','" + textBox11facs.Text + "','" + textBox13sal.Text + "','" + textBox14sabt.Text + "','" + textBox15iso.Text + "','" + textBox16hamrah.Text + "')";
cn.Open();
int i =cm.ExecuteNonQuery();
if (i == 1)
MessageBox.Show("Done...");
cn.Close ();

محمد رضا فاتحی
دوشنبه 28 مهر 1393, 09:56 صبح
برای مشکل اولتون که باید قبل از اطلاعاتی که می خواین وارد کنید N بزارید و نوع فیلدتون ه nvarchar باشه
INSERT INTO tolidlavazemotajhizatvarzeshe (id,nv)VALUES(N'" + textBox1id.Text + "',N'" + textBox2nv.Text + ')";
برای مشل دومتون هم احتمالا محل فایل پایگاه داده که به ویژوال استدیو دادین اشتباهه یعنی آدرس بانکتون یه چیزیه آدرسی که تو Server Explorer دادید یه چیز دیگه

sanaz.ebrazeh
دوشنبه 28 مهر 1393, 10:19 صبح
ممنون مشکل اول حل شد اما مشکل دوم نه خب من وقتی دیتاگرید رو به اسکیوا اکسپرس مرتبط کردم همون جا آدرس رو کپی کردم پس نباید فرق داشته باشه

hosseinbarnamenevis
دوشنبه 28 مهر 1393, 13:43 عصر
int i چیه نوشتین؟
خب بعد از cm.ExecuteNonQuery() میره رویه messagebox
شما فقط بنویس cm.ExecuteNonQuery

sanaz.ebrazeh
دوشنبه 28 مهر 1393, 14:04 عصر
امتحان کردم فایده نداش بازم وقتی دیتابیس رو باز میکنم چیزی توش نیست فقط نشون میده تو دیتاگرید رفته

gerdioz
دوشنبه 28 مهر 1393, 14:10 عصر
فکر کنم
صحبت دوستون درست باشه
شما واسه اینکه مطمئن بشید از خود سی شارپ ی دستور ساخت تیبل بزنید
ببینید تو بانکتون جدول رو می ساره
اصلا به همون بانک وصل می شید

امیر مهرشاد
دوشنبه 28 مهر 1393, 16:43 عصر
با فرض اینکه بانک اصلیتون در درایو D شاخه MyProg و زیر شاخه DB باشه
رشته اتصالتونو اینجوری بدید



@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\MyProg\DB\ Dbvarzesh.mdf;Integrated Security=True;User Instance=True"

sanaz.ebrazeh
سه شنبه 29 مهر 1393, 15:31 عصر
سلام من مشکلم حل شد وقتی پایگاه رو ساختم کدی رو که در حین ویزارد اتصال بهم میداد رو بر میداشتم درصورتی که آدرس رو باید از قسمت پروپرتیزش برمیداشتم که اشاره به پوشه دیباگ داشت
اما حالا مشکل دیگه ای دارم اطلاعات وارد میشه ولی مثلا بعد 7تا ورود اطلاعات از کد

int i =cm.ExecuteNonQuery();
ایراد میگیره از برنامه خارج میشم مجدد میرم داخل اطلاعات بعدی که وارد میکنه میندازه وسط نمیبره آخر بندازه و واسه من ترتیب ورود اطلاعات خیلی مهمه
کسی میدونه باید چیکار کرد

RIG000
سه شنبه 29 مهر 1393, 15:36 عصر
سلام من مشکلم حل شد وقتی پایگاه رو ساختم کدی رو که در حین ویزارد اتصال بهم میداد رو بر میداشتم درصورتی که آدرس رو باید از قسمت پروپرتیزش برمیداشتم که اشاره به پوشه دیباگ داشت
اما حالا مشکل دیگه ای دارم اطلاعات وارد میشه ولی مثلا بعد 7تا ورود اطلاعات از کد

int i =cm.ExecuteNonQuery();
ایراد میگیره از برنامه خارج میشم مجدد میرم داخل اطلاعات بعدی که وارد میکنه میندازه وسط نمیبره آخر بندازه و واسه من ترتیب ورود اطلاعات خیلی مهمه
کسی میدونه باید چیکار کرد
واضح تر تو ضیح بده! ارور چی میده ؟

sanaz.ebrazeh
سه شنبه 29 مهر 1393, 15:43 عصر
نمیدونم فقط این خط رو زرد رنگ میکنه من هم مجبور میشم بیام بیرون و دوباره برم حالت اجرا مشکلش حل شده ولی داده ها رو وسط مینداه

RIG000
سه شنبه 29 مهر 1393, 20:46 عصر
از اینکه میگه داده ها رو وسط نشون میده متوجه نمیشم.!!
در ضمن وقتی این زرد میشه یک لحظه صبر کنی یه کادر بهت نشون میده که توش ارور رو نوشته. باید ارور رو بدی تا ببینیم مشکلش چیه..
اینجوری بنویسش

SqlConnection cn = new SqlConnection(); SqlCommand cm = new SqlCommand();
try
{


cn.ConnectionString =
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Dbvarzesh.mdf;Integrated Security=True;User Instance=True";
string CmdText ="INSERT INTO tolidlavazemotajhizatvarzeshe (id,nv,mfaliyat,nm,web,email,ostan,shahr,neshani,t el,facs,mahsol,saltasis,sabt,iso,hamrah)VALUES('" +
textBox1id.Text + "','" + textBox2nv.Text + "','" + textBox3faaliyat.Text + "','" + textBox4nm.Text +
"','" + textBox5web.Text + "','" + textBox6email.Text + "','" + textBox7ostan.Text + "','" +
textBox8shahr.Text + "','" + textBox9neshani.Text + "','" + textBox10tel.Text + "','" +
textBox11facs.Text + "','" + textBox12mahsol.Text + "','" + textBox13sal.Text + "','" +
textBox14sabt.Text + "','" + textBox15iso.Text + "','" + textBox16hamrah.Text + "')";
cm=new SqlCommand(CmdText,cn);
cn.Open();
cm.ExecuteNonQuery();


MessageBox.Show("Done...");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cm.Dispose();
cn.Dispose();
cn.Close();


}

sanaz.ebrazeh
چهارشنبه 30 مهر 1393, 08:15 صبح
سلام
ممنون کد شما رو نوشتم با کد شما بدون اینکه پیغام خطایی بده وقتی 6مین اطلاعات رو وارد کردم برد انداخت قبل 5مین اطلاعات وارد شده با کد خودم امتحان کردم و از پیغام خطا عکس گرفتم براتون میزارم

124810

124811

RIG000
چهارشنبه 30 مهر 1393, 10:42 صبح
سلام
ممنون کد شما رو نوشتم با کد شما بدون اینکه پیغام خطایی بده وقتی 6مین اطلاعات رو وارد کردم برد انداخت قبل 5مین اطلاعات وارد شده با کد خودم امتحان کردم و از پیغام خطا عکس گرفتم براتون میزارم

124810

124811
عکس وجود ندارد.ادرس رو اشتباه تایپ کردید؟!!!
چه جوری عکسشو ضمیمه کردی.....!!!
ببین 6 مین اطلاعات رو وارد کردم یعنی 6 رکورد وارد کردی؟

sanaz.ebrazeh
چهارشنبه 30 مهر 1393, 10:51 صبح
من این کد رو


ORDER BY id ASC

در فرم لود خودم که دیتابیس رو لود میکنه در این خط گذاشتم



cm.CommandText = "select * from tolidlavazemotajhizatvarzeshee ORDER BY id ASC";

حالا اطلاعاتی رو بر اساس شماره زیر هم قرار میده اما وقتی دورقمی میشه
id شماره 10 رو میبره زیر 1 و ID شماره 22 رو میبره زیر 2
حالا باید چیکار کنم

sanaz.ebrazeh
چهارشنبه 30 مهر 1393, 10:56 صبح
124816

124817

RIG000
چهارشنبه 30 مهر 1393, 10:58 صبح
تو بانکت دیتا تاپid رو چی گرفتی؟!

sanaz.ebrazeh
چهارشنبه 30 مهر 1393, 11:02 صبح
همه ی فیلدهام رو nvarchar(50) گرفتم

RIG000
چهارشنبه 30 مهر 1393, 11:03 صبح
124816

124817



مقداری که وارد میکنی بزرگتر از فضایی هست که تو فیلد مورد نظرت تو جدولت گرفتی

RIG000
چهارشنبه 30 مهر 1393, 11:04 صبح
همه ی فیلدهام رو nvarchar(50) گرفتم
id رو navar char نمیگیرن
باید int بگیری

sanaz.ebrazeh
چهارشنبه 30 مهر 1393, 11:04 صبح
الان دیگه پیغام خطایی نمیده اما اطلاعات رو پشت هم قرار نمیده که در تاپیک شماره 17 توضیح دادم

sanaz.ebrazeh
چهارشنبه 30 مهر 1393, 11:05 صبح
چه فرقی میکنه اگه من int گرفتم باز هم پشت هم ننداخت چی من الان 11 تا رکورد وارد کردم

RIG000
چهارشنبه 30 مهر 1393, 11:07 صبح
navarchar همون string هست واسه همین برای شما بصورت متن asc میشه. int بگیر تا به طور number به خودش بفهمونه و sort کنه برات....
و به طور واضح خطایی که عکسش رو گذاشتی یه کی از تکست باکس هات بیشتر از حد navarchar 50 داره میفرسته یعنی 60 تا مثلا" ... اون وقت 60 تو 50 جا نمیشه ....
بهتر اون رو navar char MAX بگیری...

RIG000
چهارشنبه 30 مهر 1393, 11:14 صبح
فرق میکنه !!! در مورد دیتا تایپ ها بیشتر بخون خواهر من. ... !!!
ویزارد رو با کد دستی همه رو قاطی کردی .....
کد فرم لودت رو به این شکل بنویس و اون ویزارد رو پاک ...

private void Form1_Load(object sender, EventArgs e) {
OleDbConnection con = new OleDbConnection();
con.ConnectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Laptop-os\Desktop\WindowsFormsApplication1\WindowsFormsAp plication1\bin\db.accdb";
OleDbDataAdapter da = new OleDbDataAdapter("Select * from Table1 order by id ASC", con);
DataTable dt = new System.Data.DataTable();
da.Fill(dt);
dataGridView1
.DataSource = dt;
}
البته این به ACCESS هست که برای مشکلاتی که بچه ها دارن روش کار میکنم و جواب میدم...
شما بسته به این نحوه کار کلاس SQL جای OLEDB اضافه کن....

sanaz.ebrazeh
چهارشنبه 30 مهر 1393, 12:09 عصر
درست شد دستتون درد نکنه مرسی
حالا زیر هم میندازه واقعا ممنون
فقط در تاپیک شماره 25 که در مورد پیغام خطا گفتین

یکی از تکست باکس هات بیشتر از حد navarchar 50 داره میفرسته یعنی 60 تا مثلا" ... اون وقت 60 تو 50 جا نمیشه ....
بهتر اون رو navar char MAX بگیری...

میخواستم بگم من عدد مقابل navarchar رو به 4000 تغییر دادم پس دیگه با این پیغام مواجه نمیشم درسته؟
البته فقط برای یکی از تکس باکس هام چون در هر سطر بیش از 8060 کلمه قبول نمیکنه
چون ممکنه تو یکی از تکس باکس هام مثلا یکی دو پاراگراف قرار بدم

RIG000
چهارشنبه 30 مهر 1393, 12:19 عصر
البته فقط برای یکی از تکس باکس هام چون در هر سطر بیش از 8060 کلمه قبول نمیکنه
چون ممکنه تو یکی از تکس باکس هام مثلا یکی دو پاراگراف قرار بدم
اینو متوجه نشدم!
navarchar (Max بگیرید ببینید چی میشه)

Kaveh619
پنج شنبه 01 آبان 1393, 01:07 صبح
من فکر میکنم مشکل از همون int i هست....چون میخواد مقدار cm.executenonquery() رو بریزه تو I و خب این رسما امکان نداره!!!!!!!!
int i و علامت مساوی رو پاک کنید...مستقیما بزنید cm.executenonquery()