یه مشکل کوچولو

matin.mt

New Member
سلام
من دو جدول
Order(OrderID,MemberName,Name,…) و OrderDitails(OrderDetailsID,OrderID,GoodsID,…) دارم قراراست درجدولOrder اطلاعات مشتری ودرجدول OrderDitails خریدهای هرمشتری ثبت بشه. باکدهایی که من نوشتم اطلاعات درهردوجدول قرارمی گیره، به جزفیلد OrderID درجدول OrderDitails که به ازای هرمشتری باصفر پرمی شه

می شه لطفا منو راهنمایی کنید که چطورکدمو اصلاح کنم
یک بخش ازکدهای من:
[ltr]
کد:
[FONT=Courier New]cmd.CommandText = [COLOR=#a31515]"INSERT INTO Order(MemberName, Name) "[/COLOR] + [COLOR=#a31515]"VALUES (@MemberName, @Name)"[/COLOR];[/FONT]
[FONT=Courier New]cmd.Parameters.Add([COLOR=#a31515]"@MemberName"[/COLOR], [COLOR=#2b91af]SqlDbType[/COLOR].VarChar, 50);[/FONT]
[FONT=Courier New]cmd.Parameters.Add([COLOR=#a31515]"@Name"[/COLOR], [COLOR=#2b91af]SqlDbType[/COLOR].NVarChar, 50);[/FONT]
 
[FONT=Courier New]cmd.Parameters[[COLOR=#a31515]"@MemberName"[/COLOR]].Value = User.Identity.Name;[/FONT]
[FONT=Courier New]cmd.Parameters[[COLOR=#a31515]"@Name"[/COLOR]].Value = (([COLOR=#2b91af]TextBox[/COLOR])Wizard1.FindControl([COLOR=#a31515]"txtName"[/COLOR])).Text;[/FONT]
 
[COLOR=blue][FONT=Courier New]int[/FONT][/COLOR][FONT=Courier New] OrderID = [COLOR=#2b91af]Convert[/COLOR].ToInt32(cmd.ExecuteScalar());[/FONT]
 
[FONT=Courier New]cmd.CommandText =[COLOR=#a31515]"INSERT INTO OrderLine(OrderID, GoodsID)"[/COLOR]+[COLOR=#a31515]"VALUES (@OrderID, @GoodsID)"[/COLOR];[/FONT]
[FONT=Courier New]cmd.Parameters.Clear();[/FONT]
[FONT=Courier New]cmd.Parameters.Add([COLOR=#a31515]"@OrderID"[/COLOR], [COLOR=#2b91af]SqlDbType[/COLOR].Int);[/FONT]
[FONT=Courier New]cmd.Parameters.Add([COLOR=#a31515]"@GoodsID"[/COLOR], [COLOR=#2b91af]SqlDbType[/COLOR].Int);[/FONT]
 
[FONT=Courier New]cmd.Parameters[[COLOR=#a31515]"@OrderID"[/COLOR]].Value = OrderID;[/FONT]
[COLOR=blue][FONT=Courier New]foreach[/FONT][/COLOR][FONT=Courier New] ([COLOR=#2b91af]CartItem[/COLOR] item [COLOR=blue]in[/COLOR] Profile.Cart.Items)[/FONT]
[FONT=Courier New]{[/FONT]
[FONT=Courier New]cmd.Parameters[[COLOR=#a31515]"@GoodsID"[/COLOR]].Value = item.GoodsID;[/FONT]
 
[FONT=Courier New]cmd.ExecuteNonQuery();[/FONT]
[FONT=Courier New]}[/FONT]
[/ltr]
 
آخرین ویرایش توسط مدیر:

MDP

Well-Known Member
سلام دوست عزیز.

اول ورود شما رو به سایت مجید آنلاین تبریک میگم.

در جواب سوال شما اول این نکته رو ذکر کنم که استفاده از این روش برای مقدار دهی و ساخت Command ها فقط در زمانی توصیه میشه که شما حالت خاص پیش بینی نشده اید دارید.ولی برای الان بهترین و سریع ترین راه استفاده از DataSet هاست.

این سورس شما هیچ اشکالی نداره.شما مقدار پیش فرضی برای ورودی OrderID قرار نداده اید.اشکال از اونجاست.

/

یک پیشنهاد :

برای نام های دیتابیس از این حالت استفاده نکنید به 2 دلیل :

1 - هکر ها این مدل ها رو بهرتی می تونن پیدا کنن.
2 - سرعت کد زنی شما رو پایین میاره.

من تریجیح میدم این جوری بزارم فیلد ها رو :

کد:
OrderID = OID
GoodsID = GID
UserName = U_N_U
PassWord = P_W_U
 

matin.mt

New Member
سلام

بازهم ممنون ازنکته هایی که گفته بودید
شرمنده امامن منظورتونوازاینکه گفتید، مقدارپیش فرضی برای ورودیOrderID قرارندادم، متوجه نشد، چون درجدول Order مقدارشو Identity انتخاب کرده بودم.
 

m1pfard

Member
مقدار OrderID رو تو این سطر امتحان کردین:
PHP:
int OrderID = Convert.ToInt32(cmd.ExecuteScalar());

Execute فقط تعداد رکوردهای درج شده رو بر می گردونه (البته تو حالت Insert و تا اونجا که من می دونم!!!!)
شما باید مقدار ID آخرین رکوردی رو که درج کردین رو برگردونین:
یعنی کد اسکریپت به این شکل باشه:

PHP:
cmd.CommandText = "INSERT INTO Order(MemberName, Name) " + "VALUES (@MemberName, @Name);SELECT SCOPE_IDENTITY () ;";
در این حالت ID آخرین رکورد درج شده رو بر میگردونه

منبع: Get the ID of a Newly Inserted Row Using SCOPE_IDENTITY
 

جدیدترین ارسال ها

بالا