PDA

View Full Version : سوال: استفاده از Backgroundworker برای Insert کردن همزمان داده ها در Sql



behiunforgiven
چهارشنبه 28 اردیبهشت 1390, 15:53 عصر
با سلام خدمت دوستان

من میخواستم تعداد زیادی از داده ها رو همزمان درون دیتابیس وارد کنم که برای این کار از Backgroundworker استفاده کردم.

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

میشن لطفا در این زمینه راهنمایی کنید؟

haghft
چهارشنبه 28 اردیبهشت 1390, 17:19 عصر
اگر خطای Cross theard میده اون کدی که دیباگر با این ارور هایلایت میکنه رو در درون این کد بگذارید:
Invoke(new MethodInvoker(delegate {کد مورد نظر}));

behiunforgiven
جمعه 30 اردیبهشت 1390, 09:57 صبح
نه دوست من، با تشکر از شما خطایی که من با اون مواج میشم به خاطر احتمالا استفاده همزمان از یک Connection و Insert کردن همزمان در پایگاه داده ست.

masoudmok
جمعه 30 اردیبهشت 1390, 10:20 صبح
سلام .
احتمال این همزمانی نزدیک صفر هستش . اصلا صفره . همزمانی وجود نداره . حتی وقتی دارن به قول شما همزمان هم این کارو انجام میدن یه اختلاف حتی خیلی جزیی توی ترتیب اجراشون وجود داره موقع ارسال دستور insert به سرور sql .
ولی می تونی از stored procedure استفاده کنی . اون موقع خود sql server روی کارایی که انجام میدی زمانبندی دقیقی انجام میده .

Reza_Yarahmadi
جمعه 30 اردیبهشت 1390, 10:55 صبح
کدتون و خطایی که میده رو اینجا بذارید تا بدونیم با چه مشکلی طرف هستیم و بهتر بشه کمکتون کرد.

خطایی که من با اون مواج میشم به خاطر احتمالا استفاده همزمان از یک Connection و Insert کردن همزمان در پایگاه داده ست. SQL Server بصورت پیشفرض محدودیتی (غیر از محدودیت های سخت افزاری) برای تعداد کانکشن نداره. حدس من اینه که شما توی تمام Thread های از یک کانکشن استفاده کردید و در زمان باز و بسته کردن کانکشن با خطا مواجه میشید. برای حل این مشکل بهتره توی هر Thread یک کانکشن درست کنید.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
SqlConnection con = new SqlConnection("Connection String");
...
}

behiunforgiven
شنبه 31 اردیبهشت 1390, 10:56 صبح
بله احتمالا مشکل از همینجا باید باشه، با تشکر از دوستانی که راهنمایی کردن، روش کار می کنم و نتیجه رو همین جا می گم