PDA

View Full Version : سوال: سوال در مورد خطای نوع داده ای



cisco ++
شنبه 16 شهریور 1392, 12:01 عصر
سلام دوستان
این خطا رو به روش های مختلف خواسته ام رفع کنم ولی نشده ، اگه راهنمایی کنید ممنون میشم:
http://sinc.net84.net/up/d324c2883882.jpg

ghasemloo
شنبه 16 شهریور 1392, 12:05 عصر
با سلام
مطمئنی رشته اتصال درسته
یا
اسم جدولت درسته
یا
دستور مربوطه رو درست نوشتی:چشمک:

cisco ++
شنبه 16 شهریور 1392, 12:10 عصر
رشته اتصال درسته
اسم جدول هم همینطور!
دستور هم درسته ، نگاه کنید :


private void button2_Click(object sender, EventArgs e)
{
try
{
using (SqlConnection con = new SqlConnection(connect))
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO fact_info(fact_id, druge,price,amount,total,selldate) VALUES (@C1, @C2, @C3, @C4, @C5 ,@C6)", con))
{
cmd.Parameters.Add(new SqlParameter("@C1", SqlDbType.Int ));
cmd.Parameters.Add(new SqlParameter("@C2", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter("@C3", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@C4", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@C5", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@C6", SqlDbType.NVarChar ));
con.Open();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (!row.IsNewRow)
{
cmd.Parameters["@C1"].Value = label3.Text.Trim();
cmd.Parameters["@C2"].Value = row.Cells[1].Value;
cmd.Parameters["@C3"].Value = row.Cells[2].Value;
cmd.Parameters["@C4"].Value = row.Cells[3].Value;
cmd.Parameters["@C5"].Value = row.Cells[4].Value;
cmd.Parameters["@C6"].Value = label5.Text.Trim();
cmd.ExecuteNonQuery();
}
}
}
}
}
finally
{
MessageBox.Show("ثبت اطلاعات با موفقیت انجام یافت ");
}

نظرتون چیه ؟؟؟؟

ghasemloo
شنبه 16 شهریور 1392, 12:21 عصر
ببین دوست عزیز
من زیاد با این روش کار نکردم
اما اگه نظرم رو می خوای باید بگم
برای fact_id و اون دسته که عدد می گیرند
باید به این صورت نوشته شوند
'fact_id'ینی با تک کوتیشن

R_khaleghi
شنبه 16 شهریور 1392, 12:30 عصر
رشته اتصال درسته
اسم جدول هم همینطور!
دستور هم درسته ، نگاه کنید :


private void button2_Click(object sender, EventArgs e)
{
try
{
using (SqlConnection con = new SqlConnection(connect))
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO fact_info(fact_id, druge,price,amount,total,selldate) VALUES (@C1, @C2, @C3, @C4, @C5 ,@C6)", con))
{
cmd.Parameters.Add(new SqlParameter("@C1", SqlDbType.Int ));
cmd.Parameters.Add(new SqlParameter("@C2", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter("@C3", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@C4", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@C5", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@C6", SqlDbType.NVarChar ));
con.Open();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (!row.IsNewRow)
{
cmd.Parameters["@C1"].Value = label3.Text.Trim();
cmd.Parameters["@C2"].Value = row.Cells[1].Value;
cmd.Parameters["@C3"].Value = row.Cells[2].Value;
cmd.Parameters["@C4"].Value = row.Cells[3].Value;
cmd.Parameters["@C5"].Value = row.Cells[4].Value;
cmd.Parameters["@C6"].Value = label5.Text.Trim();
cmd.ExecuteNonQuery();
}
}
}
}
}
finally
{
MessageBox.Show("ثبت اطلاعات با موفقیت انجام یافت ");
}

نظرتون چیه ؟؟؟؟

سلام.
این جوری بنویس جواب میده:



com.Parameters.Add("@F_Name", OleDbType.VarChar).Value = Txt_F_Name.Text;

hamid_0341
شنبه 16 شهریور 1392, 12:32 عصر
فکر کنم یکی از فیلد هات توی تیبل از نوع Int ولی تو داری String میریزی !
cmd.Parameters["@C1"].Value = label3.Text.Trim(); و cmd.Parameters["@C6"].Value = label5.Text.Trim();
به اینت تبدیل کن بریز !!


البته من Sql خیلی وارد نیستم ! :لبخند:

R_khaleghi
شنبه 16 شهریور 1392, 12:39 عصر
مشکل از این هست:

cmd.Parameters["@C1"].Value = label3.Text.Trim();


به این صورت تغییرش بده ببین درست میشه:

cmd.Parameters["@C1"].Value = Convert.toInt32(label3.Text.Trim());

hamid_0341
شنبه 16 شهریور 1392, 12:40 عصر
مشکل از این هست:

cmd.Parameters["@C1"].Value = label3.Text.Trim();


به این صورت تغییرش بده ببین درست میشه:

cmd.Parameters["@C1"].Value = Convert.toInt32(label3.Text.Trim());

cmd.Parameters["@C6"].Value = label5.Text.Trim();

این هم همینجوریه !! اینم تغییر بده !

cisco ++
شنبه 16 شهریور 1392, 12:44 عصر
سلام.
این جوری بنویس جواب میده:



com.Parameters.Add("@F_Name", OleDbType.VarChar).Value = Txt_F_Name.Text;


ممنون ولی دیدین که هم از گریدویو میخونه و هم از لیبل میخونه ؟ بعدشم این نمونه رو جایگزین کدوم سطر بکنم؟؟

R_khaleghi
شنبه 16 شهریور 1392, 13:02 عصر
داخل کدت این خط هم امکان ارور داره :


cmd.Parameters["@C2"].Value = row.Cells[1].Value;


تغییرش بده به این صورت :


cmd.Parameters["@C2"].Value = row.Cells[1].Value.Tostring();

R_khaleghi
شنبه 16 شهریور 1392, 13:05 عصر
cmd.Parameters["@C6"].Value = label5.Text.Trim();

این هم همینجوریه !! اینم تغییر بده !

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

cisco ++
شنبه 16 شهریور 1392, 13:12 عصر
بله از نوع رشته هست و بخاطر همین تعجب میکنم

R_khaleghi
شنبه 16 شهریور 1392, 13:15 عصر
بله از نوع رشته هست و بخاطر همین تعجب میکنم

شما داخل کدت اون دوتا String رو به int تبدیل کردین
C1 , C2 را به این تبدیل کنید
امتحان کنید شاید جواب بده.

cisco ++
شنبه 16 شهریور 1392, 16:47 عصر
آخه تو جدول پایگاه داده ام c1 از نوع int و c2 از نوع nvarchar هستش
میشه مگه تو کدها تغییرش داد؟

R_khaleghi
شنبه 16 شهریور 1392, 16:59 عصر
آخه تو جدول پایگاه داده ام c1 از نوع int و c2 از نوع nvarchar هستش
میشه مگه تو کدها تغییرش داد؟


تو کدها کدها که نمیخواد نوع داده ای آن را عوض کنی.
فقط بعد = که گذاشتی می تونی نوعش رو عوض کنی.
مثلا برای C1 که از نوع عددی هست مقداری که میخوای درونش ذخیره کنی از نوع رشته ای است و خطا میده. پس باید تبدیل به عدد کنی.
برای C2 هم همین طور. چون رشته ای است ممکن است مقدار عددی نتواند ذخیره کند.
پس بعد از علامت = باید کدت را تغییر بدی.

موفق باشی

khokhan
شنبه 16 شهریور 1392, 18:52 عصر
آخه تو جدول پایگاه داده ام c1 از نوع int و c2 از نوع nvarchar هستش
میشه مگه تو کدها تغییرش داد؟
با سلام
اون try / finaly رو موقتا کامنت کن تا فیلدی رو که خطا روش اتفاق می افته معلوم بشه بعد طبق راهنمایی که دوست خوبمونhamid_0341 ارائه کردند مقدار مربوط به اون رو به int تبدیل کن بعد بفرست برای ثبت :


cmd.Parameters["@C2"].Value = row.Cells[1].Value.Tostring();


درضمن این اگه همون کدی باشه که هست نبایستی ارور بده احتمالا فیلد جدول رو عوض کردین درسته ؟؟؟؟؟؟؟؟؟؟؟؟؟

cisco ++
شنبه 16 شهریور 1392, 19:02 عصر
R-Khalegi عزیز ، تبدیل کردم ولی خطا پابرجاست
:متفکر:

cisco ++
شنبه 16 شهریور 1392, 19:07 عصر
khokhan عزیز تبدیل کردم ولی خطا پابرجاست
دوتا جدول دقیقا مثل جداول fact_info و d_info ایجاد کردم و فقط تنها تفاوت در یک فیلد اضافی در جدول fact_info هست که واسه اون خطا نمیده چون توی پارامترها هم آورده ام ( همون C6)

R_khaleghi
شنبه 16 شهریور 1392, 19:12 عصر
R-Khalegi عزیز ، تبدیل کردم ولی خطا پابرجاست
:متفکر:

می تونی یه عکس از جدولت بزاری؟

cisco ++
شنبه 16 شهریور 1392, 19:28 عصر
این تصویر جدول :
http://isen.net78.net/up/41a0099c9ac0.jpg

اینم خطا:
http://isen.net78.net/up/5586803f1435.jpg

roolinjax
شنبه 16 شهریور 1392, 19:30 عصر
سلام
خوب حالا چه اصراریه از روش پارامتری استفاده کنید ؟
همون دستور اس کیو ال رو با مقدارهای موردنظر پر کن
فقط برای انواع رشته ای از تک کوتیشن استفاده کن و برای عددی بدون تک کوتیشن
میخواید نمونه بذارم ؟

R_khaleghi
شنبه 16 شهریور 1392, 19:45 عصر
این تصویر جدول :
http://isen.net78.net/up/41a0099c9ac0.jpg

اینم خطا:
http://isen.net78.net/up/5586803f1435.jpg


سلام.
اون قسمتی که نوشته label.text.trim
trim را بردار.

roolinjax
شنبه 16 شهریور 1392, 19:51 عصر
سلام.
اون قسمتی که نوشته label.text.trim
trim را بردار.

ربطی نداره برادر
trim هم خروجیش استرینگه

R_khaleghi
شنبه 16 شهریور 1392, 19:57 عصر
ربطی نداره برادر
trim هم خروجیش استرینگه

شما می دونی کدام قسمتش ایراد داره؟

roolinjax
شنبه 16 شهریور 1392, 20:09 عصر
من عرض کردم ، غیر پارامتری کار کنن
نمیدونم چه اصراریه
"insert into tbl1 (charfield,intfield) values ('"+label3.Text.Trim()+"',"+row.Cells[1].Value.Tostring()+")"

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

cisco ++
شنبه 16 شهریور 1392, 20:14 عصر
بله فکر نمیکنم به trim مربوط باشه
آخه روش پارامتری به نظرم واضح تر هست و راحت تر تفهیم میشم بخاطر همین استفاده میکنم
دستور اس کیو ل رو کار کرده ام قبلا ولی اگه نمونه دارید که ممنون میشم بزارید منم یه نگاهی بندازم

R_khaleghi
شنبه 16 شهریور 1392, 20:21 عصر
چرا از استور پروسیجر استفاده نمی کنی؟

cisco ++
شنبه 16 شهریور 1392, 21:36 عصر
من store procedure بلد نیستم
س شارپ رو در حد تعدادی از روش ها بلدم نه همه ی روش های استفاده و کار با پایگاه داده ها
اگه از دوستان کسی هست که راهنمایی کنه و همین کد ها بدون خطا اجرا بشن خیلی خیلی ممنون میشم. من خیلی وقته درگیر این کدها هستم

khokhan
شنبه 16 شهریور 1392, 21:47 عصر
من store procedure بلد نیستم
س شارپ رو در حد تعدادی از روش ها بلدم نه همه ی روش های استفاده و کار با پایگاه داده ها
اگه از دوستان کسی هست که راهنمایی کنه و همین کد ها بدون خطا اجرا بشن خیلی خیلی ممنون میشم. من خیلی وقته درگیر این کدها هستم
شما جایی رو که از همه مهمتر توی تصویر پنهون کردین :لبخند:
110291


فیلدهای جدول fact_info


110292

cisco ++
شنبه 16 شهریور 1392, 21:51 عصر
نه خوب تو تصویر اولیه این تاپیک واضحا نشون داده شده ولی تو تصویر دوم دیده نمیشه
یعنی از فیلدای جدولم id رو ندارم؟
راستی اونی که کلید اصلیه auto number که نیست؟

cisco ++
شنبه 16 شهریور 1392, 22:16 عصر
شما جایی رو که از همه مهمتر توی تصویر پنهون کردین :لبخند:
110291


فیلدهای جدول fact_info


110292

ببینید ، من الان همه فیلدام مثه اونیه که شما تو شکل آوردین بجز آخرین فیلدم که selldateو از نوع nvarchar هست.والسلام
به تعداد 6 تا هم پارامتر دارم ولی مشکل پابرجاست

R_khaleghi
شنبه 16 شهریور 1392, 22:31 عصر
ببینید ، من الان همه فیلدام مثه اونیه که شما تو شکل آوردین بجز آخرین فیلدم که selldateو از نوع nvarchar هست.والسلام
به تعداد 6 تا هم پارامتر دارم ولی مشکل پابرجاست

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

sohil_ww
شنبه 16 شهریور 1392, 22:33 عصر
حقیقتش حوصلم نکشید کل تایپیک و کامل بخونم :افسرده:

بانک برنامه sql2000 ? ? ? هست ؟

دوست عزیز در اس کیو ال نوع استرینگ با ' و عددی بدون ' شناخته می شه

شما پروژه تو ضمیمه کن برات اصلاح کنم یا بهتر کمکت کنیم

sohil_ww
شنبه 16 شهریور 1392, 22:36 عصر
البته من الان توضیحات استاد خوخان دیدمو فکر کنم مشکل حل شده
چون بعید ایشان و مشکل یه جا به طور همزمان باهم باشن
چاکر استاد :تعظیم: :تعظیم: :تعظیم:
متاستفانه شکلکش موجود نیست ولی شما همینو از ما قبول کنید

cisco ++
یک شنبه 17 شهریور 1392, 07:52 صبح
بانک sql 2000 هستش
اتفاقا استاد گرامی جناب خوخان کمک کرده ان واسه این برنامه ولی چند روزه حضورشون کم رنگ هست و نمیتونیم مفیوض بشیم !
اینم لینک برنامه
http://www.uploadmb.com/dw.php?id=1378612695

cisco ++
یک شنبه 17 شهریور 1392, 12:17 عصر
دوستان چی شد پس؟ گفتین برنامه رو بزارم کمک کنید
پس کوووووووووووووووووووو؟؟؟

sohil_ww
یک شنبه 17 شهریور 1392, 12:50 عصر
دوست عزیز برنامه من دیدم ولی بانکت متفاوته منظورم اینه که بانکی که کنار برنامت دادی جدول TblDrug نداره و چندتایم فیلد از جدول fact_info !!!! اونوفت ما چیو اصلاح کنیم

khokhan
یک شنبه 17 شهریور 1392, 13:27 عصر
دوست عزیز برنامه من دیدم ولی بانکت متفاوته منظورم اینه که بانکی که کنار برنامت دادی جدول TblDrug نداره و چندتایم فیلد از جدول fact_info !!!! اونوفت ما چیو اصلاح کنیم
دیتابیس مورد اشاره این دوستمون توی سرور خودشون اتک هست و احتمالا یادشون رفته اون فایل دیتابیس رو از داخل پوشه debug حذف کنه :لبخند:

roolinjax
یک شنبه 17 شهریور 1392, 17:50 عصر
سلام من یه تغییر کوچولو دادم و خطایی نداد و ثبت شد
cmd.Parameters["@C1"].Value = int.Parse(label3.Text.Trim());
cmd.Parameters["@C2"].Value = row.Cells[1].Value.ToString ();
cmd.Parameters["@C3"].Value =int.Parse( row.Cells[2].Value.ToString ());
cmd.Parameters["@C4"].Value =int.Parse ( row.Cells[3].Value.ToString ());
cmd.Parameters["@C5"].Value =int.Parse( row.Cells[4].Value.ToString ());
cmd.Parameters["@C6"].Value = label5.Text.ToString ();
cmd.ExecuteNonQuery();
دقت کن به جای Convert.Int32 از int.Parse استفاده کردم
این تنها تغییری بود که دادم