PDA

View Full Version : سوال: مشکل در insert



Shahab_H
سه شنبه 20 مهر 1389, 22:06 عصر
با سلام
من در اینسرت به مشکل بر خوردم
با WPF کار می کنم

یک table به نام person دارم و به این شکل کد رو نوشتم:


Person newPerson = new Person();

newPerson.Username = textBox_Username.Text;
newPerson.Address = textBox_Address.Text;

و بعد مقدار دهی می خوام newPerson رو به table اضافه کنم سرچ کردم این کدو پیدا کردم
Accounting_DBDataContext dbuser = new Accounting_DBDataContext();
dbuser.Persons.Add(new Person);
اما مشکل اینه که متد ADD وجود نداره!
از dbuser.Persons.InsertOnSubmit(newPerson); استفاده کردم ولی اضافه نمیشه!
بعدش submitchange() رو که میذارم هنگ می کنه برنامه

از attach() هم استفاده کردم نشد.

لطفا راهنمایی کنید.

مهدی فرزاد
چهارشنبه 21 مهر 1389, 11:20 صبح
سلام كد شما به اين شكل هست و مشكلي هم نبايد داشه باشه


Accounting_DBDataContext dbuser = new Accounting_DBDataContext();
Person newPerson = new Person();
newPerson.Username = textBox_Username.Text;
newPerson.Address = textBox_Address.Text;
dbuser.Persons.InsertOnSubmit(newPerson);
dbuser.submitchange();


در ضمن ديتابيس شما اگه در پوشه Bin قرار داره با هر بار اجراي برنامه از محيط Vs ديتابيس اوليه جايگزين خواهد شد به اين نكته هم دقت كنيد
همچنين فيلد كلدي مناسب تعريف كنيد
اگر در ديتا بيس تغييري داديد مجددا اون رو به كلاس Linq to sql اضافه كنيد تا تغييرات اعمال شود
نوع داده هاي فيلد هاي جدول ديتابيس رو چك كنيد و ببيند با داده هاي وارد شده تناقض نداشته باشد

Shahab_H
چهارشنبه 21 مهر 1389, 17:43 عصر
با سلام و تشکر فراوان

بله در پوشه bin قرار داره. باید در جای دیگه ای قرارش بدم؟

اطلاعات رو چک کردم مشکلی از نظر نوع نداشت و حتی فیلدهایی که nullable هستن هم بهشون مقدار null نمی فرستم و string خالی می فرستم ولی بازم به submitchange که میرسه این اکسپشن رخ میده
String or binary data would be truncated.
The statement has been terminated.

حتی به تمام فیلدها مقدار غیر از string.empty هم می دم بازم به خط Submitchanges() می رسه گیر می کنه

Shahab_H
چهارشنبه 21 مهر 1389, 21:59 عصر
در stacktrace هم این بود:

at System.Data.SqlClient.SqlConnection.OnError(SqlExc eption exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnErro r(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndW arning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteRead er(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderT ds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader( CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNo nQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Exp ression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll( Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data .Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.ChangeDirector.StandardChangeDire ctor.DynamicInsert(TrackedObject item)
at System.Data.Linq.ChangeDirector.StandardChangeDire ctor.Insert(TrackedObject item)
at System.Data.Linq.ChangeProcessor.SubmitChanges(Con flictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(Conflic tMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at Accounting.Window_UserUpdate.Insert_User() in C:\Users\Shahab\Desktop\Accounting\Accounting\Wind ow_UserUpdate.xaml.cs:line 153
at Accounting.Window_UserUpdate.button_AddUser_Click( Object sender, RoutedEventArgs e) in C:\Users\Shahab\Desktop\Accounting\Accounting\Wind ow_UserUpdate.xaml.cs:line 133
at System.Windows.RoutedEventHandlerInfo.InvokeHandle r(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Objec t source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(Dependency Object sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArg s e)
at System.Windows.Controls.Primitives.ButtonBase.OnCl ick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMo useLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.UIElement.OnMouseLeftButtonUpThunk( Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEv entHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Deleg ate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandle r(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Objec t source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.ReRaiseEventAs(Dependency Object sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEv entHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Deleg ate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandle r(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Objec t source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(Dependency Object sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedE ventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArg s args, Boolean trusted)
at System.Windows.Input.InputManager.ProcessStagingAr ea()
at System.Windows.Input.InputManager.ProcessInput(Inp utEventArgs input)
at System.Windows.Input.InputProviderSite.ReportInput (InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.Repo rtInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.Filt erMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessa ge(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation( Object o)
at System.Windows.Threading.ExceptionWrapper.Internal RealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCat chWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.InvokeImpl(Dis patcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl( DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(Disp atcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at System.Windows.Application.Run()
at Accounting.App.Main() in C:\Users\Shahab\Desktop\Accounting\Accounting\obj\ Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

مهدی فرزاد
چهارشنبه 21 مهر 1389, 23:44 عصر
با سلام و تشکر فراوان

بله در پوشه bin قرار داره. باید در جای دیگه ای قرارش بدم؟


نه نیازی نیست در جای دیگه قرار بدید وقتی برنامه رو از توی خود پوشه bin اجرا کنید مشکلی نداره فقط از توی محیط vs این اتفاق می افته
در ضمن شما میتونید روی دیتا بیس در vs کلیک راست کنید و اونو در حالتی قرار بدید که کپی نشه ولی بعدش باید حتما دستی یک کپی از دیتا بیس رو در پوشه Bin قرار بدید تا برنامه خطا نده

Shahab_H
پنج شنبه 22 مهر 1389, 21:42 عصر
هم چنان گیر میکنه:اشتباه:

majid325
شنبه 24 مهر 1389, 15:19 عصر
من فکر میکنم مشکل یا از dataType های فیلد ها باشه یا از مقدار ورودیشون
اگه بتونید پروژه را آپلود کنید بیشتر میتونم کمکتون کنم

Shahab_H
شنبه 24 مهر 1389, 21:44 عصر
پروژه حجمش یکم زیاد شده و فکر کنم داونلودش براتون وقت گیر باشه. حجمش 2.92 مگه داونلودش براتون مقدوره؟
ممنونم از توجهتون.

مهدی فرزاد
شنبه 24 مهر 1389, 23:34 عصر
آره بگذارید دانلود میشه کرد

majid325
یک شنبه 25 مهر 1389, 10:19 صبح
بله .......

Shahab_H
یک شنبه 25 مهر 1389, 18:12 عصر
ممنون از لطفتون و وقتی که می ذارید:قلب:
در ص login یوزر و پس رو 1 بدید در صفحه ای که باز میشه قسمت کاربران بعد از پر کردن مشخصات کاربر جدید و زدن روی دکمه ی اضافه در صورتی که ارور نداشته باشه برنامه هنگ می کنه!
http://www.4shared.com/file/SJCFRB00/Accounting.html

مهدی فرزاد
دوشنبه 26 مهر 1389, 10:18 صبح
سلام
برنامه شما رو ديدم
اشكال واضحي داشت
ببينيد دوست عزيز شما براي برگرداندن مقدار كمبو باكسي كه در برنامه نام وضعيت را به آن داده ايد از اين كد استفاده كرده ايد


comboBox_Status.SelectedItem.ToString();


كه اين مقدار صحيح رو به شما نميدهد و خروجي آن به اين شكل است


System.Windows.Controls.ComboBoxItem: فعال


كه اين مقدار بيشتر از تعداد كاركتر هاي تعريف شده براي فيلد ديتابيس است
علت اين امر هم اين است كه شما در كد Xaml يه صورت دستي مقدار كمبو باكس رو مشخص كرديد

كد رو ملاحظه كنيد اين را شما نوشتيد


<ComboBoxItem Content="فعال" />
<ComboBoxItem Content="معلق" />


راه حل

بجاي استفاده از


newPerson.Status = comboBox_Status.SelectedItem.ToString();


بنويسيد


newPerson.Status = comboBox_Status.Text;


برنامه به خوبي اجرا ميشود

بيشتر به خروجي هايي كه قرار است در ديتابيس نوشته شود دقت كنيد
بهتر بود يك بار چك ميكرديد كه چه مقداري براي فيلد Status ارسال ميشود
برنامه اشكال زياد داره
بيشتر دقت كنيد

موفق باشد

Shahab_H
دوشنبه 26 مهر 1389, 11:00 صبح
خیلی خیلی خیلی ممنون

این برنامرو برای پروژه ی کارآموزیم دارم می نویسم که خیلی کاری ندارن چیه فقط باید یه برنامه نوشت ولی تصمیم گرفتم با WPF بنویسم که یذره باهاش آشنا شم چون در حال حاضر مشغول درس خوندن برای کارشناسی ارشدم وقت ندارم WPF رو اصولی و کامل یاد بگیرم.

خیلی خوشحال میشم ایراداشو بهم بگین:لبخندساده:

Shahab_H
یک شنبه 02 آبان 1389, 22:55 عصر
یه مشکل هست و اونم این که بعد از اینسرت کردن برای table ای که کلیدش به صورت identity تعریف شده برنامه موقع Submitchange هنگ می کنه و میگه Cannot add an entity with a key that is already in use.
البته بار اول که اینسرت کردم هیچ مشکلی نداشت ولی از بار دوم دیگه نمی ذاره
ممنون میشم کمک کنید