با سلام
یک دیتاتیبل ایجاد کردم که متشکل از یک کوئری از فیلدهای ترکیبی است مانند :
... SELECT fld1 as cnames , fld1 FROM tbl1 INNER JOIN tbl2 ON ... WHERE
حال می خواهم اطلاعات موجود در این دیتاتیبل وارد دیتابیس اصلی شود.
لطفا راهنمایی کنید
با سلام
یک دیتاتیبل ایجاد کردم که متشکل از یک کوئری از فیلدهای ترکیبی است مانند :
... SELECT fld1 as cnames , fld1 FROM tbl1 INNER JOIN tbl2 ON ... WHERE
حال می خواهم اطلاعات موجود در این دیتاتیبل وارد دیتابیس اصلی شود.
لطفا راهنمایی کنید
کسی راهی به ذهنش نمی رسه؟
ببینید . من ابتدا اطلاعات را در دیتا ست می ریزم. البته این اطلاعات بصورت کوئری و ترکیب چند جدول می باشد
سپس در تیبل موجود در دیتاست تغییرات می دهم یعنی رکوردهایی را اضافه یا حذف می کنم.
حالا در انتها این تغییرات باید در جدال اصلی ذخیره شود.
خب یک راه حل اینه که با حلقه for یکی یکی اطلاعات را بخونم و به ازای هر رکورد یک insert ایجاد کنم که منطقی نیست.
راه حل شما چیه ؟
فرض بفرمایید یک فاکتور قرار است درج شود . یک هدر دارد که شامل نام مشتری و تاریخ و شماره است که کاری نداریم یک دیتیل شرح کالا تعداد مبلغ و .... جدول دیتیل خود یک کوئری از ترکیب چند جدول است .
حال کاربر به این فاکتور رکوردهایی را اضافه یا حذف می کند یعنی جدول دیتیل که در دیتاست لود شده تغییر می کند. در انتها دکمه ثبت را می زند . اطلاعات دیتیل باید در جدول اصلی قرار بگیرد.
البته این یک مثال بود ولی سوال من در یک جمله خلاصه می شود دیتا ست را چگونه می شود در جداول اصلی ذخیره کرد بطوریکه این جداول دقیقا متناظر با جدول اصلی نیستند
در کل اگر جدول موقت دارید خوب اینجا دیتاتیبل دارید.
در موقع ثبت نهایی باید با یه حلقه بریزید تو دیتابیس.
سلام. درسته که فاکتور شما میتونه فیلدهاش متغیر باشه ولی فیلدهای جداول شما ثابت هستن. با کد زیر میتونید فیلدهای هر جدول رو درون یک کوئری بریزید و در خارج از حلقه با یکبار وصل شده به دیتابیس عمل درج رو انجام بدید.(من فرض رو بر این گرفتم که دیتاست رو داخل دیتاگرید ریختید، شما براحتی میتونید از همون دیتاست استفاده کنید):
توجه : در مثال زیر اولین فیلد از نوع 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();
موفق باشید.
بله دقیقا سوال منو خوب متوجه شدید و ممنون از جوابتون.
مسئله ای که برام مبهمه اینه که آیا این روش ( یعنی اینزرتهای پی در پی ) در اطلاعات بالا مشکلی پیش نمیاره؟