PDA

View Full Version : پیغام timeout



razaghi
سه شنبه 20 فروردین 1387, 09:12 صبح
جدولی در Sql Server دارم که شامل سه فیلد NameId1,NameID2,Score است. من می خواهم 60میلیون رکورد را در جدول فوق ثبت کنم. برای این منظور یک جدول در کلاینت با دستور زیر می سازم :
DataTable ocScore = new DataTable();
ocScore.Columns.Add("NameID1", System.Type.GetType("System.Int32"));
ocScore.Columns.Add("NameID2", System.Type.GetType("System.Int32"));
ocScore.Columns.Add("Score", System.Type.GetType("System.Int16"));
و با دو حلقه For جدول فوق را پر می کنم.
for (int i = 0; i < ocNameID.Rows.Count; i++)
{
for (int j = i; j < ocNameID.Rows.Count; j++)
{
ocRow = ocScore.NewRow();
ocRow["NameID1"] = ocNameID.Rows[i]["NameID"].ToString();
ocRow["NameID2"] = ocNameID.Rows[j]["NameID"].ToString();
ocRow["Score"] = -1;
ocScore.Rows.Add(ocRow);
}
}
و بعد از پر کردن جدول ocScore با استفاده از دستور update در جدول اصلی در دیتابیس کپی می کنم با دستور زیر :

using (SqlDataAdapter ocFillAdapter = new SqlDataAdapter(@"select * from ASShabahat", PrcNameCon))
{
SqlCommandBuilder ocBuilder = new SqlCommandBuilder(ocFillAdapter);
ocFillAdapter.Update(ocScore);
}
به دلیل اینکه این روش در update طولانی می شد و یا مشکل Virtual memory داشت روش تغییر دادم و هر 1000 رکورد که در جدول ocScore ذخیره می شد. در جدول اصلی کپی کردم و جدول ocScore را Clear می کنم. ولی این راه هم بعد از اینکه حدود 1000000 رکورد را ذخیره می کند پیغام timeout می دهد. لطفا راهنمایی کنید.

علیرضا مداح
سه شنبه 20 فروردین 1387, 09:27 صبح
سلام ،
شما میتوانید از Batch Update استفاده نمایید:
http://msdn2.microsoft.com/en-us/library/kbbwt18a(VS.80).aspx