واضح آرشیو وب فارسی:سایت ریسک: یه مشکل کوچولو matin.mt 06 تير 1388, 08:34سلام من دو جدول Order(OrderID,MemberName,Name,…) و OrderDitails(OrderDetailsID,OrderID,GoodsID,…) دارم قراراست درجدولOrder اطلاعات مشتری ودرجدول OrderDitails خریدهای هرمشتری ثبت بشه. باکدهایی که من نوشتم اطلاعات درهردوجدول قرارمی گیره، به جزفیلد OrderID درجدول OrderDitails که به ازای هرمشتری باصفر پرمی شه می شه لطفا منو راهنمایی کنید که چطورکدمو اصلاح کنم یک بخش ازکدهای من: cmd.CommandText = "INSERT INTO Order(MemberName, Name) " + "VALUES (@MemberName, @Name)"; cmd.Parameters.Add("@MemberName", SqlDbType.VarChar, 50); cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50); cmd.Parameters["@MemberName"].Value = User.Identity.Name; cmd.Parameters["@Name"].Value = ((TextBox)Wizard 1.FindControl("txtName")).Text; int OrderID = Convert.ToInt32(cmd.ExecuteScalar()); cmd.CommandText ="INSERT INTO OrderLine(OrderID, GoodsID)"+"VALUES (@OrderID, @GoodsID)"; cmd.Parameters.Clear(); cmd.Parameters.Add("@OrderID", SqlDbType.Int); cmd.Parameters.Add("@GoodsID", SqlDbType.Int); cmd.Parameters["@OrderID"].Value = OrderID; foreach (CartItem item in Profile.Cart.Items) { cmd.Parameters["@GoodsID"].Value = item.GoodsID; cmd.ExecuteNonQuery(); } MDP 06 تير 1388, 10:39سلام دوست عزیز. اول ورود شما رو به سایت مجید آنلاین تبریک میگم. در جواب سوال شما اول این نکته رو ذکر کنم که استفاده از این روش برای مقدار دهی و ساخت Command ها فقط در زمانی توصیه میشه که شما حالت خاص پیش بینی نشده اید دارید.ولی برای الان بهترین و سریع ترین راه استفاده از DataSet هاست. این سورس شما هیچ اشکالی نداره.شما مقدار پیش فرضی برای ورودی OrderID قرار نداده اید.اشکال از اونجاست. / یک پیشنهاد : برای نام های دیتابیس از این حالت استفاده نکنید به 2 دلیل : 1 - هکر ها این مدل ها رو بهرتی می تونن پیدا کنن. 2 - سرعت کد زنی شما رو پایین میاره. من تریجیح میدم این جوری بزارم فیلد ها رو : OrderID = OID GoodsID = GID UserName = U_N_U PassWord = P_W_U matin.mt 06 تير 1388, 15:02سلام بازهم ممنون ازنکته هایی که گفته بودید شرمنده امامن منظورتونوازاینکه گفتید، مقدارپیش فرضی برای ورودیOrderID قرارندادم، متوجه نشد، چون درجدول Order مقدارشو Identity انتخاب کرده بودم. m1pfard 09 تير 1388, 08:04مقدار OrderID رو تو این سطر امتحان کردین: int OrderID = Convert.ToInt32(cmd.ExecuteScalar()); Execute فقط تعداد رکوردهای درج شده رو بر می گردونه (البته تو حالت Insert و تا اونجا که من می دونم!!!!) شما باید مقدار ID آخرین رکوردی رو که درج کردین رو برگردونین: یعنی کد اسکریپت به این شکل باشه: 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 ()
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 277]