نمایش نتایج 1 تا 23 از 23

نام تاپیک: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

  1. #1
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    ریختن یکجای یک دیتاگریدویو در دیتابیس(sql):

    با سلام
    دوستان من میخوام همونطور که ما اطلاعات مثلا بیست هزار سطر دیتابیس رو در یک ثانیه تو دیتاگریدویو نمایش میدیم ، بتونیم مثلا یک دیتاگریدویو بیست هزار سطری رو بصورت یکجا تو sql و بعضا در access اینسرت کنم..

    چیکار باید کرد؟ لطفا راهنمایی کنید بنده رو (فوریییه)

  2. #2

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    با سلام خدمت شما دوست گرامی

    میتونین با استفاده از ترد (Thread)اینکارو به راحتی انجام بدین,کنار همه ی خوبی هایی که ترد داره یکیش اینه که فرم شما هنگ نمیکنه و در پس زمینه فرمتون انجام میشه,معمولا برای انجام کارهای سنگین از ترد استفاده میکنن.

    موفق باشی
    بایت بایت

  3. #3
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    دوست عزیز ممنون از جوابتون ..
    ترد مگه هنگام کوئری فرستادن تو اس کیو ال جواب میده؟
    اگه منظورتون طول کشیدن هنگام اینسرت تکی و سطر به سطر باشه که مشکل من اون نیست
    من میخاااام یهو بیست هزار سطر دیتاگرید ویو رو بریزم تو sql و بعضا access ، که اگر درست اینکارو انجام بدم شاید تو چند ثانیه انجام شه و حافظه رو به اونصورت درگیر نکنه
    فقط نمیدونم با چه دستور و query اینکارو انجام بدم.........
    لطفا راهنمایی بفرمائید ؟
    جستجو کردم ولی به نتیجه نرسیدم

  4. #4
    کاربر دائمی آواتار uniqueboy_ara
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    تهران
    پست
    420

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    شما یه تابع برای insert کرذن داده ها بنویس که ورودیش، مقدار فیل هایی باشه که قراره تو هر بار اجرای تابع وارد جدولت بشه، یه چیزی مثل این ( الکی یه تابع نوشتم که منظورمو متوجه بشیا :) ):
    private void Insert(string Feild1,string Feild2,string Feild3)
    {
    ----
    ------
    -
    -----
    string insert="insert into tbl_x (name,family,phon) values (Feild1,Feild2,Feild3)";
    }



    بعدش یه حلقه foreach بنویس و به تعداد سطر های GridView این تابع رو با مقادیر هر سطر اجرا کن

    ایراد اساسی: این روش در صورتی که Transactional بودن فرآیند براتون مهم باشه، کارایی نداره! ولی اگر مهم نباشه، به خوبی کار می کنه

  5. #5
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    سلام،شما یه ستون از نوع checkbox به گرید خودتون اضافه کنید(این کار بخاطر اینه که ممکنه از 20000 رکورد گرید مثلا دوست داشته باشید 18000 رکورد رو ذخیره کنید،اگرم دوست نداشتید میتونید چک باکس نذارید). بعد از انتخاب رکوردها از درون گریدویو کافیست که رکوردهایی را که تیک خورده اند داخل یک حلقه در یک متغیر رشته ای ذخیره کنیم و در بیرون از حلقه با یک بار وصل شدن به دیتابیس آن رشته را درون دیتابیس درج کنیم،کدش این میشه(خودم تست کردم،هیچ ایرادی نداره):
    for (int i = 0; i <= t - 1; i++)
    {
    if (Convert.ToBoolean(dataGridView1.Rows[i].Cells[4].Value) == true)
    {

    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);
    con = new SqlConnection("Data source =(local);initial catalog = testgrid;integrated security = true");
    con.Open();
    SqlCommand cmd = new SqlCommand(s, con);
    cmd.ExecuteNonQuery();
    con.Close();

    اگر چک باکس نذاشتید if رو پاک کنید.
    موفق باشی دوست من.

  6. #6
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    دوستان واقعا دستتون درد نکنه از کمکتون ، منو شرمنده کردین.....

    ولی من نمیخوام هر سطر رو جدا جدا اینسرت کنم که اینطوری میشه 20000 تا اینسرت ، من میخوام تقریبا مثل دستور زیر تو اس کیو ال که درواقع ترکیب یک سلکت و اینسرت هست
    INSERT INTO TABLE1 SELECT COL1, COL2 FROM TABLE1 کار رو انجام بدم
    من این چیزی که تو ذهنمه اینه که دیتاسورس دیتاگرید که مجموعه ای از سطر و ستونهاست و یا دیتاست و دیتاتیبلی اون رو یطوری ربط بدم به یک دستور اینسرت بعد خودش همرو در یک لحظه بریزه تو دیتابیس
    به بیان ساده تر بگم ، میخام سطر اول دیتاگرید و سطر دوم اون بره تو سطر اول و دوم دیتابیس اینسرت یشه

  7. #7
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    خواهش میکنم،یاد گرفتن به تنهایی لذت نداره هروقت کسی اونو در اختیار دیگران بذاره ارزش داره،اما در مورد جمله بالاتون،به نظرم شما یه اشتباه رو مرتکب شدید!،ببینید اون insert هیچ عملی رو بر روی بانک انجام نمیده(یعنی شما به بانک وصل نمیشی،فقط داخل یه رشته ذخیره میکنی)،تو کد بالا شما فقط یه بار به دیتابیس وصل میشید نه 20000 بار،به هر صورت شما وقتی 20 هزار رکورد داری باید 20 هزار ثبت هم داشته باشی(حالا یا از روشی که در بالا گفته شد یا از thread یا ...)،مهم اینه که از چه تکنیکی برای ثبت این تعداد رکورد استفاده بشه تا سرعت پایین نیاد،شما استاد مایی ولی در نگاه اول نباید گول اون دستور insert رو خورد!،مهم اینه که برای 20 هزار رکورد فقط یه بار به دیتابیس وصل میشید،البته احتمالش زیاده که روش های دیگه ای هم وجود داشته باشه.

  8. #8
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    دوستان واقعا ممنون از پاسخهاتوون ، این چیزی که من دنبالشم شک نکنید برا همه ما مفید و بدرد بخووووره (البته تو برنامه نویسی )
    بله حق با شماست ، من اگر بیام دیتابیس رو باز کنم و بعدش یک حلقه for بزارم از اولین اندیس تا آخرین اندیس دیتاگریدویو
    و بعد داخل حلقه for بیام هر بار فقط commandtext رو عوض کنم و بعد اجراء کنم عملیات اینسرت 20000 خطم یکی یکی انجام میشه ولی 20000بار باید commandtext تغییر کنه و بعد اجرا بشه
    آخرشم دیتابیس رو میبندم ، پس بنابراین دیتابیس یکبار باز شده و بعد بسته شده و commandtext هم 20000بار اجرا شده.....
    .
    این روش خوب و معموله ولی من چیزه دیگه ای میخاااام ، من دقیقا میخام کدم با یکبار اجرا شدن بتونه این 20000سطر رو بریزه تو دیتابیس ، حالا با هر ابزار و برنامه ای شد که شد
    تو sql2008 تیییی که من دیدم حتما فکر کنم بشه یک کارایی کرد چون خیلی خیلی قدرتمند شده و ابزار های مختلف آنالیز ، گزارش گیری و در کل مدیریتی زیادی داره البته زیاد خوش دست نیست
    حالا من نمیدونم چطوری ؟ شاید با استفاده از linq بشه همچین کاری رو انجام داد ، شایدم البته نشه
    .
    دوستان نظر شما چیه؟؟

  9. #9

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    نقل قول نوشته شده توسط modern_amin مشاهده تاپیک
    این روش خوب و معموله ولی من چیزه دیگه ای میخاااام ، من دقیقا میخام کدم با یکبار اجرا شدن بتونه این 20000سطر رو بریزه تو دیتابیس ، حالا با هر ابزار و برنامه ای شد که شد
    فک کنم منظورتون این Query باشه:

    SELECT *
    INTO new_table_name [IN externaldatabase]
    FROM old_tablename

    عبارت داخل براکت اختیاریه؛ یعنی اگه قراره توی یه جدول از یک بانک اطلاعاتی دیگه (خارجی) درج کنید، باید از عبارت داخل براکت استفاده کنید.
    موفق باشید

  10. #10
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    ممنون ، چطور میشه از دیتاگریدویو به sql ریخت......

  11. #11
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    دوستان این کد زیر چیکار میکنه بنظرتون

    BULK INSERT Northwind.dbo.[Order Details]FROM 'f:\orders\lineitem.tbl'WITH (FIELDTERMINATOR = '|',ROWTERMINATOR = '|\n')

  12. #12

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    نقل قول نوشته شده توسط modern_amin مشاهده تاپیک
    ممنون ، چطور میشه از دیتاگریدویو به sql ریخت......
    اگه DataGridView به یک دیتاسورس وصل هست به این صورت بنویسید:

    SqlConnection con = new SqlConnection(@"YourConnectionString");
    DataTable dtDestination = new DataTable("desTable");
    string query = "Select * from srcTable";
    SqlDataAdapter da = new SqlDataAdapter(query, con);
    da.Fill(dtDestination);

    کد رو تست نکردم اما گمان نکنم اشتباه باشه
    موفق باشید

  13. #13
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    با تشکر
    دقیقا برعکس اینکارو میخوام ، یعنی
    بجای SELECT میخام کل دیتاگریدویو رو یهو تو دیتابیس اینسرت کنم...
    اونطوری چیکار باید کرد؟

  14. #14

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    دوست عزیز؛
    خب اینم کل DataGridView رو یهو داخل دیتابیس درج می کنه دیگه

    یه برنامه نمونه ضمیمه کنید تا بهتر متوجه صورت مسئله بشیم

  15. #15
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    کد بالا یهو میخونه (select) و میریزه تو دیتاگرید

    من میخام کل دیتاگریدرو یهو بریزم تو database ، نمیخام خط به خط انکارو کنم
    نمونه ندارم

  16. #16
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

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

  17. #17
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1391
    محل زندگی
    تهران
    پست
    32

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    نقل قول نوشته شده توسط modern_amin مشاهده تاپیک
    دوستان این کد زیر چیکار میکنه بنظرتون

    BULK INSERT Northwind.dbo.[Order Details]FROM 'f:\orders\lineitem.tbl'WITH (FIELDTERMINATOR = '|',ROWTERMINATOR = '|\n')
    دستور bulk insert برای مواقعی استفاده میشه که می خوایم مقدار بسیار زیادی از ردیف ها رو داخل جدولمون با سرعت فوق العاده زیاد بریزیم ........ تعدادی در حدود 2-3 میلیون .

  18. #18
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    776

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    سلام
    میتونین با استفاده از حلقه و خواندن سطرهای گرید از ساختار زیر برای اینزرت یکجا استفاده کنین ( برای sql 2000 )

    INSERT INTO ttest
    SELECT 'aa', 'aa', 1, 2, '11111'
    UNION
    SELECT 'bb', 'bb', 3, 4, '2222'
    UNION
    SELECT 'cc ', ' cc ', 5, 6, ' 3333 '


    برای سایر ورژنهای sql ( جدیدتر ) فکر کنم امکانات بیشتری در این ارتباط فراهم شده است ..............

  19. #19
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    ببینید، در خود SQL برای درج هر رکورد یک INSERT لازم هست.این اساس کاره.مگه اینکه شما در حین اجرای یک Query باشید و table رو در حافظه داشته باشید و از INSERT INTO استفاده کنید (که در مورد شما اینطور نیست) و یا اینکه از روشهایی مثل دستور BULK INSERT که گفتن استفاده کنید، که البته این روش هم برای مورد شما دردسر سازه، ابتدا باید اطلاعات رو از DataGridView توی فایل بریزید ... که ممکنه خودش زمان رو بیشتر کنه.
    مشکل رو اینطوری میشه بررسی کرد که نیاز به نمایش یکجای 20000 یا رکورد یا درج یکجای 20000 تا رکورد میتونی ناشی از یک طراحی غلط باشه.اگه دلیلی که نیاز به این مورد پیدا کردین رو بگین شاید نیازتون رو بشه جور دیگه ای برطرف کرد.

  20. #20
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    با تشکر از همه
    ببینید تحلیلش خیلی سخته فقط بگم درسته ، من شاید 2-3 طول کشید تا نیاز مشتری رو به اینکارا خوب درک کردم
    اساس طراحی بر نمایش 20000 رکود هست
    کاربر یک تغییر که در اطلاعات یک فیلد انجام میده با توجه به اطلاعات 20000 سطر هرکدوم باید اطلاعات خودشو بگیره و بعد هرکدام خودشو update کنه
    .
    .
    جوابش و فهمیدم ، اگه هر سلول مستقیم به دیتابیس وصل بشه بعد تغییر دیتاگرید ویو اطلاعات دیتابیسمم تغییر میکنه
    کلا کمتر از 30 ثانیه زمان میگیره
    در کا بنظرم همون حلقه for بهتره

  21. #21

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    سلام بر دوستان عزیز
    جناب آقای modern_amin
    فکر کنم در صورت مشاهده لینک زیر کارتون راه بیافته
    البته امیدوارم که منظورتون رو فهمیده باشم:
    https://barnamenevis.org/showthread.p...B3%D8%9F/page2

  22. #22

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    در صورتی که روشی که لینکش رو گذاشتم اجرا کنی، به راحتی و پس از نمایش داده های مورد نظر(چه همه داده هات باشه و یا بخشی از آن)، می توانی ویرایش ، حذف یا اضافه کردن رو انجام بدی
    موفق باشی

  23. #23

    نقل قول: ریختن یکجای یک دیتاگریدویو در دیتابیس(sql و access)

    "اگه هر سلول مستقیم به دیتابیس وصل بشه بعد تغییر دیتاگرید ویو اطلاعات دیتابیسمم تغییر میکنه
    کلا کمتر از 30 ثانیه زمان میگیره"
    این روش جواب میده ولی به نظرم اتصال تک تک فیلدها به بانک چندان درست نیست، مشکلاتی خواهد داشت از قبیل همون موردی که مشکلتون بود (سرعت) و امن هم نیست
    من این کارو میکنم
    class KharidDSql : DataLayerBase
    {
    public string Barcode { get; set; }
    public int FactorId { get; set; }
    .
    .
    .
    .


    public int InsertList(List<KharidDSql> Object_t,int j)
    {
    int b=1;
    for (int i = 1; i < j && b == 1; i++)
    {
    b = ExecuteNoneQuery(CommandType.StoredProcedure, "KharidD_Insert", new SqlParameter[] {
    new SqlParameter("@Barcode", Object_t[i].Barcode),
    new SqlParameter("@FactorId", Object_t[i].FactorId),
    .
    .
    .
    . }

    return b;
    }


    اینجوری کل dataGrid رو یه جا به این تابع میدی که با یه بار باز کردن دیتابیس درج و آپدیت و .. انجام میده! و احتمال اینکه در حین درج تعداد زیادی از رکوردها، بعضا برخی درج و بقیه ... پیش نمیاد

تاپیک های مشابه

  1. چرا نمیشه رو دیتابیس sql مثل access رمز گذاشت
    نوشته شده توسط swallow.pa در بخش مدیریت دیتابیس (Database Administration)
    پاسخ: 13
    آخرین پست: چهارشنبه 25 آذر 1394, 12:24 عصر
  2. دوره مالی جهت برنامه حسابداری با دیتابیس SQL
    نوشته شده توسط Mahdi_S_T در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: دوشنبه 14 دی 1383, 13:16 عصر
  3. مسیر دیتابیس sql server
    نوشته شده توسط Asad.Safari در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: چهارشنبه 27 آبان 1383, 17:33 عصر
  4. اجرای کریستال در webpage با دیتابیس sql server
    نوشته شده توسط salimy در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: سه شنبه 05 آبان 1383, 03:45 صبح
  5. نصب و Restore یک دیتابیس SQL ، از توی دلفی؟
    نوشته شده توسط FirstLine در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: پنج شنبه 29 خرداد 1382, 21:41 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •