PDA

View Full Version : سوال: انتقال اطلاعات از دیتاتیبل



mehran_337
دوشنبه 30 بهمن 1391, 09:11 صبح
با سلام
یک دیتاتیبل ایجاد کردم که متشکل از یک کوئری از فیلدهای ترکیبی است مانند :
... SELECT fld1 as cnames , fld1 FROM tbl1 INNER JOIN tbl2 ON ... WHERE

حال می خواهم اطلاعات موجود در این دیتاتیبل وارد دیتابیس اصلی شود.

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

mehran_337
دوشنبه 30 بهمن 1391, 10:48 صبح
کسی راهی به ذهنش نمی رسه؟

mehran_337
دوشنبه 30 بهمن 1391, 14:12 عصر
ببینید . من ابتدا اطلاعات را در دیتا ست می ریزم. البته این اطلاعات بصورت کوئری و ترکیب چند جدول می باشد
سپس در تیبل موجود در دیتاست تغییرات می دهم یعنی رکوردهایی را اضافه یا حذف می کنم.
حالا در انتها این تغییرات باید در جدال اصلی ذخیره شود.
خب یک راه حل اینه که با حلقه for یکی یکی اطلاعات را بخونم و به ازای هر رکورد یک insert ایجاد کنم که منطقی نیست.
راه حل شما چیه ؟

mehran_337
سه شنبه 01 اسفند 1391, 07:37 صبح
فرض بفرمایید یک فاکتور قرار است درج شود . یک هدر دارد که شامل نام مشتری و تاریخ و شماره است که کاری نداریم یک دیتیل شرح کالا تعداد مبلغ و .... جدول دیتیل خود یک کوئری از ترکیب چند جدول است .
حال کاربر به این فاکتور رکوردهایی را اضافه یا حذف می کند یعنی جدول دیتیل که در دیتاست لود شده تغییر می کند. در انتها دکمه ثبت را می زند . اطلاعات دیتیل باید در جدول اصلی قرار بگیرد.
البته این یک مثال بود ولی سوال من در یک جمله خلاصه می شود دیتا ست را چگونه می شود در جداول اصلی ذخیره کرد بطوریکه این جداول دقیقا متناظر با جدول اصلی نیستند

fakhravari
سه شنبه 01 اسفند 1391, 11:47 صبح
در کل اگر جدول موقت دارید خوب اینجا دیتاتیبل دارید.
در موقع ثبت نهایی باید با یه حلقه بریزید تو دیتابیس.

veniz2008
سه شنبه 01 اسفند 1391, 12:17 عصر
سلام. درسته که فاکتور شما میتونه فیلدهاش متغیر باشه ولی فیلدهای جداول شما ثابت هستن. با کد زیر میتونید فیلدهای هر جدول رو درون یک کوئری بریزید و در خارج از حلقه با یکبار وصل شده به دیتابیس عمل درج رو انجام بدید.(من فرض رو بر این گرفتم که دیتاست رو داخل دیتاگرید ریختید، شما براحتی میتونید از همون دیتاست استفاده کنید):
توجه : در مثال زیر اولین فیلد از نوع int و بقیه از نوع رشته هستن.


string s = "";
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
s = s + "insert into student2 values(" + dataGridView1.Rows[i].Cells[0].Value + ",'" + dataGridView1.Rows[i].Cells[1].Value + "',N'" + dataGridView1.Rows[i].Cells[2].Value + "',N'" + dataGridView1.Rows[i].Cells[3].Value + "')" + ";";
}

s = s.Remove(s.Length - 1, 1);
SqlConnection con = new SqlConnection("Data source =(local);initial catalog = testgrid;integrated security = true");
con.Open();
SqlCommand cmd = new SqlCommand(s, con);
cmd.ExecuteNonQuery();
con.Close();
موفق باشید.

mehran_337
سه شنبه 01 اسفند 1391, 13:38 عصر
بله دقیقا سوال منو خوب متوجه شدید و ممنون از جوابتون.
مسئله ای که برام مبهمه اینه که آیا این روش ( یعنی اینزرتهای پی در پی ) در اطلاعات بالا مشکلی پیش نمیاره؟

veniz2008
سه شنبه 01 اسفند 1391, 15:35 عصر
مسئله ای که برام مبهمه اینه که آیا این روش ( یعنی اینزرتهای پی در پی ) در اطلاعات بالا مشکلی پیش نمیاره؟
چه مشکلی؟. بیشتر توضیح بدید.