PDA

View Full Version : سوال: ارور هنگام INSERT کردن



mina.net
چهارشنبه 17 تیر 1388, 21:06 عصر
سلام دوستان
دوستان به یک مشکل عجیب برخورد کردم همیشه از این روش برای INSERT کردن استفاده می کنم ولی نمی دونم چرا حالا خطایی زیر رو صادر می کنه. دوستان اگه می شه کمک کنید چرا این خطا صادر می شه و چطور باید برطرف کرد؟
Parameterized Query '(@ID bigint,@complet_name nvarchar(100),@bed money,@best money,@' expects parameter @sharh, which was not supplied.

کدی که برای INSERT کردن نوشتم


cmd = New SqlCommand("insert into bed_best (id,complet_name,sharh,bed,best,TARIKH,mainid,type ,radif,erja,sharh1)values (@id,@complet_name,@sharh,@bed,@best,@TARIKH,@main id,@type,@radif,@erja,@sharh1)", con)
With cmd
.Parameters.Add(New SqlParameter("@ID", SqlDbType.BigInt)).Value = id
.Parameters.Add(New SqlParameter("@complet_name", SqlDbType.NVarChar, 100)).Value = name
.Parameters.Add(New SqlParameter("@bed", SqlDbType.Money)).Value = bed
.Parameters.Add(New SqlParameter("@best", SqlDbType.Money)).Value = best
.Parameters.Add(New SqlParameter("@TARIKH", SqlDbType.NVarChar, 10)).Value = date1

.Parameters.Add(New SqlParameter("@mainid", SqlDbType.BigInt)).Value = maxid + 1
.Parameters.Add(New SqlParameter("@sharh1", SqlDbType.NVarChar, 100)).Value = sharh1
.Parameters.Add(New SqlParameter("@sharh", SqlDbType.NVarChar, 100)).Value = sharh
.Parameters.Add(New SqlParameter("@type", SqlDbType.NVarChar)).Value = type_f_kh
.Parameters.Add(New SqlParameter("@erja", SqlDbType.BigInt)).Value = erja
.Parameters.Add(New SqlParameter("@radif", SqlDbType.BigInt)).Value = radif
EndWith
cmd.ExecuteNonQuery()

karim orooji
چهارشنبه 17 تیر 1388, 21:27 عصر
اللهم عجل لوليك الفرج

با سلام
شما دوست گرامي قبل از cmd.ExecuteNonQuery() بايد شما بياين con خود رو open كنيد



con.open

mina.net
چهارشنبه 17 تیر 1388, 21:46 عصر
اللهم عجل لوليك الفرج

با سلام
شما دوست گرامي قبل از cmd.ExecuteNonQuery() بايد شما بياين con خود رو open كنيد

دوست عزیز هرچند دراین کد نیست ولی قبلش این کار رو انجام دادم.

mina.net
پنج شنبه 18 تیر 1388, 20:43 عصر
دوستان کسی نمی خواد به من جواب بده؟

karim orooji
جمعه 19 تیر 1388, 10:02 صبح
باسلام
شما دوست عزيز:
اگه يه لطفي بكني كل كد ها رو بزاري شايد بشه كاركنيم

mina.net
جمعه 19 تیر 1388, 10:57 صبح
باسلام
شما دوست عزيز:
اگه يه لطفي بكني كل كد ها رو بزاري شايد بشه كاركنيم
اگه فکر می کنی تاثیری داره باشه


PrivateSub Btn_s_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_s.Click

Dim date1 AsString = ""
If Barbod1.IrDate <> ""Then
If DATE_adad2(Barbod1.IrDate) = TrueThen
date1 = Barbod1.IrDate.Replace("/", "")
Else
MessageBoxFa.Show("¢ں©ی¦ی ­¥ی¥ ëی«¢", "ى¬§ں©", MessageBoxButtons.OK, MessageBoxIcon.Warning)
ExitSub
EndIf
EndIf
'**************************
If Val(TextBox2.Text) <> Val(TextBox3.Text) Then
MessageBoxFa.Show("ê¤êيم §ىکں© ں ê¤êيم «¢ںëکں© ©ں © ëی«¢", "ى¬§ں©", MessageBoxButtons.OK, MessageBoxIcon.Warning)
ExitSub
EndIf
'**************************
Dim id, radif AsInteger
Dim name, sharh, sharh1 AsString
Dim bed, best AsDouble
sharh1 = TextBox4.Text
con.Open()
For i AsInteger = 0 To DG2.RowCount - 2
Try
radif = DG2.Item("radif", i).Value
Catch ex As Exception
radif = Nothing
EndTry
'******
id = DG2.Item("id_hesab", i).Value
name = DG2.Item("name_hesab", i).Value
Try
erja = DG2.Item("erja", i).Value
Catch ex As Exception
erja = Nothing
EndTry
'*****
bed = DG2.Item("bed", i).Value
best = DG2.Item("best", i).Value
Try
sharh = DG2.Item("sharh", i).Value
Catch ex As Exception
sharh = Nothing
EndTry

'************************************************
cmd = New SqlCommand("insert into bed_best (id,complet_name,sharh,bed,best,TARIKH,mainid,type ,radif,erja,sharh1)values (@id,@complet_name,@sharh,@bed,@best,@TARIKH,@main id,@type,@radif,@erja,@sharh1)", con)
With cmd
.Parameters.Add(New SqlParameter("@ID", SqlDbType.BigInt)).Value = id
.Parameters.Add(New SqlParameter("@complet_name", SqlDbType.NVarChar, 100)).Value = name
.Parameters.Add(New SqlParameter("@bed", SqlDbType.Money)).Value = bed
.Parameters.Add(New SqlParameter("@best", SqlDbType.Money)).Value = best
.Parameters.Add(New SqlParameter("@TARIKH", SqlDbType.NVarChar, 10)).Value = date1
.Parameters.Add(New SqlParameter("@mainid", SqlDbType.BigInt)).Value = maxid + 1
.Parameters.Add(New SqlParameter("@sharh1", SqlDbType.NVarChar, 100)).Value = sharh1
.Parameters.Add(New SqlParameter("@sharh", SqlDbType.NVarChar, 100)).Value = sharh
.Parameters.Add(New SqlParameter("@type", SqlDbType.NVarChar)).Value = type_f_kh
.Parameters.Add(New SqlParameter("@erja", SqlDbType.BigInt)).Value = erja
.Parameters.Add(New SqlParameter("@radif", SqlDbType.BigInt)).Value = radif
EndWith
cmd.ExecuteNonQuery()
Next
MessageBoxFa.Show("£ ¢ ںë¤ںê ¬§", "¦ ©", MessageBoxButtons.OK, MessageBoxIcon.Information)
Btn_new_Click(sender, e)
EndSub

mina.net
جمعه 19 تیر 1388, 14:36 عصر
اینم تصویر ارور
http://www.barnamenevis.org/forum/attachment.php?attachmentid=32960&stc=1&d=1247222101

kablayi
جمعه 19 تیر 1388, 20:28 عصر
شما به جای استفاده ازAdd


With cmd
.Parameters.Add(New SqlParameter("@ID", SqlDbType.BigInt)).Value = id
.Parameters.Add(New SqlParameter("@complet_name", SqlDbType.NVarChar, 100)).Value = name
.
.
.
EndWith

از AddWithValue به صورت زیر استفاده کنید...


With cmd
.Parameters.AddWithValue("@ID", id)
.Parameters.AddWithValue(("@complet_name", name)
.
.
.
EndWith

موقع استفاده از ADD ممکنه data type که برای پارامتر مشخص میکنید در جدول تفاوت داشته باشه ... به همین خاطر پیشنهاد میکنم از AddWithValue استفاده کنید تا دیگه نیازی به تعریف دیتا تایپ نداشته باشین ...

mina.net
جمعه 19 تیر 1388, 20:47 عصر
ممنون دوست عزیز
اگه می شه به این تاپیک هم سری بزنیدhttp://www.barnamenevis.org/forum/showthread.php?t=167544

mina.net
جمعه 19 تیر 1388, 22:43 عصر
جناب kablayi از AddWithValue استفاده کردم ولی بازم خطای قبلی صادر می شه. این خطا زمانی صادر می شه یک یا چند فیلد مقدار نداشته باشند.

kablayi
شنبه 20 تیر 1388, 00:52 صبح
نسبت به برنامه تون به متغیر هایی که قرار است در جدول ذخیره بشن مقدار اولیه بدین ...
مقادیری که در کار برنامه خلل ایجاد نکنن ....
ببینید کار با دیتاتایپ ها در بانک اطلاعاتی یه مقدار دشواره و هر کدام ساز خودشونو میزنن و برنامه نویس مجبوره با ساز اونا برقصه ... من پیشنهاد میکنم که در بانک اطلاعاتیتون بیشتر فیلدهاتونو از نوع string بگیرید و خودتونو سردرگم نکنید ... VB.NET انعطاف پذیری خودشو برای تبدیل انواع دیتاتایپ ها به حق نشون داده و به نظرم شما اگر در برنامه هاتون تبدیل دیتاتایپ ها رو در خو دات نت انجام بدین راحتتر باشین تا اینکه خودتونو با دیتاتایپ های دیتابیس هماهنگ کنید ...
مثلا در اعمال عادی روی اعداد شما راحت میتونید اون عدد از string در دیتابیس به دیتاتایپ مورد نیازتون در دات نت تبدیل کنید و اعمال ریضی رو روی اون انجام بدین و در دیتابیس ذخیره کنید ...
برای فیلدهایی هم که نیازی به محاسبه ندارن مثل شماره ردیف یا ID و ... فکر نمیکنم نیازی به محاسبه داشته باشه و میتونید از نوع String تعریف کنید....

البته این نظر شخصیه منه شاید اشتباه باشه...

karim orooji
شنبه 20 تیر 1388, 12:21 عصر
با سلام
اين يك برنامه برات نوشتم كار insert, delete , update رو انجام ميده

اول :بانك رو به sql server اضافه كن

ميتوني ازش الگو بگيري

موفق باشي

mina.net
شنبه 20 تیر 1388, 20:10 عصر
با سلام
اين يك برنامه برات نوشتم كار insert, delete , update رو انجام ميده

اول :بانك رو به sql server اضافه كن

ميتوني ازش الگو بگيري

موفق باشي
دوست عزیز مشکل حل شد. در ضمن من نظرم آموزش این موضوعاتی که شما می گید نیست فکر کنم اگه بخواهیم بشماریم حداقل تو برنامه ام 100 تا 150 بار از این دستورات استفاده کردم. اگه به متن خطای که برنامه صادر می کرد توجه می کردید بهتر بود. به هر حال از اینکه توجه دارید ممنون.

دوستان من مشکلم به صورت موقت حل شد ولی فکر نکنم این راه حلی که در پیش گرفتم کاملا اصولی باشه. من مقادیر خالی رو با مقدارهای که تو برنامه اخلال ایجاد نکنه عوض کردم و مشکل حل شد. حالا اگه یک جای بخواهیم حتما مقدار نال باشه اونوقت چی؟