PDA

View Full Version : ثبت اطلاعات dataGridView در دیتابیس



navidiran
چهارشنبه 21 مهر 1389, 10:15 صبح
سلام. دوستان این موضوع رو از سایتها گشتم اما یک لینک کامل برای رفع مشکلم پیدا نکردم.
من می خوام اطلاعات داخل دیتاگریدم رو با یک کلیک به دیتابیس بریزم. کد زیر رو نوشتم. اما نمی دونم کجای کار می لنگه (فقط موقع ثبت به خط InsertOnSubmit خطا میده)


semat sem = budgetDataContext.semats.Where(p => p.SematName.Trim() == dataGridBudget.CurrentRow.Cells[0].Value.ToString().Trim()).FirstOrDefault();
user use = budgetDataContext.users.Where(p => p.Username.Trim() == userNameTxt.Text.Trim()).FirstOrDefault();
contract cont = budgetDataContext.contracts.Where(p => p.ContractNumber.Trim() == contracttxt.Text.Trim()).FirstOrDefault();
budgetEstimate estimat = newbudgetEstimate();
for (int i = 0; i < rowCount; i++)
{
estimat.ContractId = cont.Id;
estimat.ContractPay = System.Convert.ToInt64(moneytxt.Text)
estimat.Tedad = ArrayTedad[i];
estimat.SematId = sem.Id;
estimat.VuserId = use.Id;
estimat.Vdate = dateTodayTxt.Text;
budgetDataContext.budgetEstimates.InsertOnSubmit(e stimat);
budgetDataContext.SubmitChanges();
}

navidiran
چهارشنبه 21 مهر 1389, 11:48 صبح
لطفا یکی جوابی بده چون نیاز به کمک دارم.

ایمان مدائنی
چهارشنبه 21 مهر 1389, 11:58 صبح
دوست خوبم چند روز پيش آقاي MMD2009 يك نمونه از اينكار را گذاشته بود

در پروفايل ايشون جست و جو كن پيدا ميكني

alen332
چهارشنبه 21 مهر 1389, 14:46 عصر
دوست عزيز DataGridاطلاعاتشو از بانك مي گيره هر كاري داري با بانك و table‌انجام بده نه با DataGrid

ایمان مدائنی
چهارشنبه 21 مهر 1389, 14:50 عصر
دوست عزيز DataGridاطلاعاتشو از بانك مي گيره هر كاري داري با بانك و table‌انجام بده نه با DataGrid
دوست عزيز ايشون ميخواد مقادير داخل داتاگريد رو به داخل بانك بريزه ، اونوقت چطوري با گريد كاري نداشته باشه ؟ :متفکر:

ميشه شما توضيح بدي ما هم ياد بگيريم ؟

alen332
چهارشنبه 21 مهر 1389, 15:00 عصر
DataGrid نشان دهنده DataSet و آن نيز DataAdapterو آن نيز محتويات SQL-TBL مي باشد بنابراين هر تعريفي بر روي DataGrid(INSERT&UPDATE&...) عينا در SQL-TBL ثبت مي شود پس نيازي به كار بر روي DataGrid نيست.

ایمان مدائنی
چهارشنبه 21 مهر 1389, 15:03 عصر
حرف شما درست هست
ولي خب بهتر است توضيحات رو كامل كنيد
شايد گريد ويو از بانك پر نشده باشه و توسط كاربر پر بشه
پس شما بايد بگي كه گريد ويو داخل داتاست ريخته بشه بعد داخل بانك

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

alen332
چهارشنبه 21 مهر 1389, 15:13 عصر
كاملا شما درست مي گيد اين حالت زماني اتفاق مي افته كه ما از فايل استفاده كنيم كه اون هم مشكلات خاص خودشو داره عدم نمايش كاراكتري DATA , عدم CASH &UNCASH‌كردن ديتا كه فكر نكنم به درد دوستمون بخوره به عنوان مثال براي حل اين موضوع كد زير رو در نظر بگيريد
SqlCommand objCommand = newSqlCommand(); objCommand.Connection = objConnection; objCommand.CommandType = CommandType.Text; objCommand.CommandText = "INSERT INTO [pubs].[dbo].[All_Condition](B_Isbm,B_Name,B_Type,Publisher_Name,Date_B_Input, Date_B_Output,Position,Price,Discount)" + "VALUES (@B_Isbm ,@B_Name,@B_Type,@Publisher_Name,@Date_B_Input,@Da te_B_Output,@Position,@Price,@Discount)"; objCommand.Parameters.AddWithValue("@B_Isbm", textBox1.Text); objCommand.Parameters.AddWithValue("@B_Name", textBox2.Text); objCommand.Parameters.AddWithValue("@Discount", textBox4.Text); objCommand.Parameters.AddWithValue("@Date_B_Input", textBox5.Text); objCommand.Parameters.AddWithValue("@Date_B_Output", textBox6.Text); objCommand.Parameters.AddWithValue("@Price", textBox8.Text); objCommand.Parameters.AddWithValue("@Publisher_Name", comboBox1.Text); objCommand.Parameters.AddWithValue("@B_Type", comboBox2.Text); objCommand.Parameters.AddWithValue("@Position", comboBox3.Text); objConnection.Open(); objCommand.ExecuteNonQuery(); addd.DataSource = objDataView;
توي اين كد DataGrid فقط VIEWER‌هست اين DataView هست كه خودشو تحميل كرده و همينطور بريد تا DataConnection به اين ميگن layer on layer پس اين دوست ما بهتره كه از DataGrid متصل به بانك بهره مند باشه و با query تو در تو مشكلو حل كنه .

ایمان مدائنی
چهارشنبه 21 مهر 1389, 15:23 عصر
البته راه بهتر و آسون تر اينه كه از يك حلقه استفاده كنه و مقادير ستونها و سلولها رو خط به خط بخونه و داخل بانك بريزه
نظر شما چيه ؟

تقريبا با يكم دستكاري تو كد خودش به نتيجه ميرسه
ديگه نيازي هم به داتا ست و داتاويو نداره

alen332
چهارشنبه 21 مهر 1389, 15:36 عصر
كاملا درسته ولي اشكال كوچيكش كه بعدها ممكنه با افزايش كاربر افزايش پيدا كنه تعداد فيلدهاست اگه فيلدها ميليوني و ميلياردي و .... بشه در هر CASH &UNCASH چه اتفاقي مي افتده در يك لحظه حلقه ميليادها بار تكرار و خطاي garbage در برنامه و يا در سيستم عامل رخ بده من نميگم از dataview ويا dataset و يا ... استفاده بشه بهترين راه استفاده از query در SQL هستش چون كافيه با چند خط دستور همه اين اتفاقات در محيط SQL بافته در واقع ادغام ميليلردها حالت حلقه ها در يك دستور SQL چون مشكل دوستمون كپي اطلاعات يك TBL در TBL ديگه مي باشد

amir-yeketaz
چهارشنبه 21 مهر 1389, 15:37 عصر
راحت ترین راه اینه که اول اطلاعان داخل dgv رو بریزی تو یه دیتاتیبل :

به این صورت:

DataTable dt = (DataTable)dataGridView1.DataSource;

و حالا به راحتی میتونی با استفاده از کلاس SqlCommandBuilder و SqlDataAdpter اطلاعات رو رو جدول مورد نظرت تو دیتابیس Update کنی

خیلی ساده بود نه ؟!!:لبخند:

موفق باشید ....

alen332
چهارشنبه 21 مهر 1389, 15:40 عصر
حتي در محيط T-SQL ميتونيد دسترسي به تك تك فيلدها و آدرس حافظه داشته باشيد بدون اينكه KERNEL‌سيستم عامل و RAM‌درگير چندين تكرار بيهوده بشن و از پاسخ به ساير درخواستها در اون لحظه قافل بشن

alen332
چهارشنبه 21 مهر 1389, 15:42 عصر
راحت ترین راه اینه که اول اطلاعان داخل dgv رو بریزی تو یه دیتاتیبل :

به این صورت:

DataTable dt = (DataTable)dataGridView1.DataSource;و حالا به راحتی میتونی با استفاده از کلاس SqlCommandBuilder و SqlDataAdpter اطلاعات رو رو جدول مورد نظرت تو دیتابیس Update کنی

خیلی ساده بود نه ؟!!:لبخند:

موفق باشید ....

درسته منهم موافقم چون با DATABASE كار ميشه مثالي كه در بالا زدم اين مورد رو تاييد ميكنه

حسین شهریاری
چهارشنبه 21 مهر 1389, 19:01 عصر
سلام
از کلاس SqlBulkInsert شیئی مشتق کنید و خواص و متدهای آنرا ببینید.
این کلاس شما را قادر میسازد محتویات دیتاست را در جدول فیزیکی ذخیره کنید.
خب اطلاعات شما هم که قبل از نمایش در دیتا گرید ویو حتما توی یک دیتاست هستند پس این میتونه بهترین روش باشه.
موفق باشید

sara_traveler
چهارشنبه 21 مهر 1389, 22:31 عصر
دوستان من هم ميخوام اطلاعات با نوشتن در گريد اضافه و حذف و اپديت بشه
اما زماني كه drop down دارم به مشكل ميخورم چون هميشه جواب اول drop down نشون ميده و از بانك نميخونه
بايد چيكار كنم؟

علی فتحی
پنج شنبه 01 آذر 1397, 19:56 عصر
سوالات رو در w3-farsi.com مطرح کنید سایت پولیه ولی خوبی که داره هر کسی جواب نمیده مدیریت بصورت حرفه ای جواب رو بررسی کرده و بهترین پاسخ رو انتشار میده
ولی اینجا متصفانه سلیقه ای شده 50 جواب برای یک تاپیک موجود ولی هیچ کدوم بدرد بخور نیست با تشکر