PDA

View Full Version : مبتدی: انتقال اطلاعات از دیتابیس local به دیتابیس host



modern_payam
پنج شنبه 21 مهر 1390, 11:47 صبح
با سلام خدمت تمامی دوستان.

از اساتید گرانقدر سوالی داشتم در زمینه انتقال اطلاعات از دیتابیس local به دیتابیس host

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

دیتابیس ها هر دوتاشون sqlserver 2008 است.

از دوستان کمک گرفتم که از دستور insert into استفاده کنم.

وقتی که در محیط ویندوز، کانکشن استرینگم را تغییر می دهم یعنی تحت سرور هاستم می کنم به راحتی می توانم عملیات درج و حذف و ویرایش را روی دیتابیس هاستم انجام دهم

ولی وقتی از دستور insert into به صورت آدرس دیتابیس مقصد و آدرس دیتابیس مبدا استفاده می کنم.

وقتی query من می رود تا در محیط سرور انجام شود دیتابیس مبدا من که در محیط لوکال است را نمی شناسد.


"insert into [ database maghsad(host)].[dbo].[Tdaftarche_tel] select name,family from [database mabda(local host)].[dbo].[Tdaftarche_tel]"


بعد از اجرا کردن این query با پیغام خطای زیر روبرو می شوم.


Invalid object name ' database mabdah(local host ).dbo.Tdaftarche_tel'.

مطالبی هم خوندم که گفتن می توانی از دستور export استفاده کنی برای انتقال اطلاعات

ممنون می شوم مرا راهنمایی کنید که برای انتقال اطلاعات از چه راهی استفاده کنم

hjran abdpor
پنج شنبه 21 مهر 1390, 17:51 عصر
با سلام.
http://www.codeproject.com/KB/aspnet/Database_Export_Wizard.aspx
http://weblogs.sqlteam.com/jeffs/archive/2008/02/27/60539.aspx

modern_payam
پنج شنبه 21 مهر 1390, 18:26 عصر
ممنون از معرفی سایت ها.
در سایت code project نمونه برنامه ای بود که وقتی سورسش رو دانلود کردم و سپس اجرا خطا می داد.
و فکر کنم با vb.net بود که من زیاد آشنا نیستم باهاش من c#.net رو مسلط هستم.

در سایت دوم نمونه کدی نوشته بود که به نظرم درست می آمد ولی موفق نشدم اجرایش کنم.

می توانید مرا بیشتر راهنمایی کنید من واقعا نیاز دارم این مشکلم حل بشود.

hjran abdpor
پنج شنبه 21 مهر 1390, 18:37 عصر
من از سایت های که دادم خودم کدهاش را استفاده کردم مشکلی نداشت !!!!!!!!!!!!!!
اگه میخواید با دستور export کار کنید بهتره یه سرچ کنید در موردش.

با سپاس

modern_payam
شنبه 23 مهر 1390, 14:55 عصر
هرچی روی کد سایت دوم کار کردم به نتیجه نرسیدم در ای قسمت برای من گنگ است.

foreach (DataRow r in AllTables.Rows)
{
Console.WriteLine("Coping table {0} of {1}: {2}", ++n, tot, r["name"]);
cm.CommandText = String.Format("select * from [{0}]", r["name"]);

dr = cm.ExecuteReader();
c.BatchSize = BatchSize;
c.DestinationTableName = r["name"].ToString();
c.NotifyAfter = NotifyAfter;
c.WriteToServer(dr);
dr.Close();
}

اگر قرار است سطر به سطر بریزد داخل دیتابیس هاست ، به نظر من اگر یک select عادی از دیتا بیس بگیرم سپس با استفاده از sqldatareader سطر به سطر بریزم توی دیتابیس هاست بهتر نیست ؟ اگر چندین هزار رکورد باشد که سرعت پایین می آید و احتمال دادن خطای transection که معمولا در زمانه واکشی اطلاعات به صورت حلقه از دیتابیس صد در صد است. ( منظورم اجرای com.ExecuteNonQuery به صورت پشت سر هم)

لطفن مرا راهنمایی کنید به چه شکل می توانم به صورت یکباره ارسال کنم مرسی

raziee
شنبه 23 مهر 1390, 15:08 عصر
هرچی روی کد سایت دوم کار کردم به نتیجه نرسیدم در ای قسمت برای من گنگ است.

foreach (DataRow r in AllTables.Rows)
{
Console.WriteLine("Coping table {0} of {1}: {2}", ++n, tot, r["name"]);
cm.CommandText = String.Format("select * from [{0}]", r["name"]);

dr = cm.ExecuteReader();
c.BatchSize = BatchSize;
c.DestinationTableName = r["name"].ToString();
c.NotifyAfter = NotifyAfter;
c.WriteToServer(dr);
dr.Close();
}

اگر قرار است سطر به سطر بریزد داخل دیتابیس هاست ، به نظر من اگر یک select عادی از دیتا بیس بگیرم سپس با استفاده از sqldatareader سطر به سطر بریزم توی دیتابیس هاست بهتر نیست ؟ اگر چندین هزار رکورد باشد که سرعت پایین می آید و احتمال دادن خطای transection که معمولا در زمانه واکشی اطلاعات به صورت حلقه از دیتابیس صد در صد است. ( منظورم اجرای com.ExecuteNonQuery به صورت پشت سر هم)

لطفن مرا راهنمایی کنید به چه شکل می توانم به صورت یکباره ارسال کنم مرسی

با سلام.
برای انتقال دیتابیس به هاست پرا از Backup و Restore استفاده نمیکنید؟
این تاپیک (http://barnamenevis.org/showthread.php?267021-Upload-%D9%88-%D9%86%D8%B5%D8%A8-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-Asp.net-%D9%88-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-MSSQL-%D8%AF%D8%B1-Host-%28%D8%AF%D8%B1-%D8%AD%D8%A7%D9%84-%D8%AA%DA%A9%D9%85%DB%8C%D9%84%29) رو مشاهده کنید.

به هر حال.
اگه میخواهید اطلاعات رو سطر به سطر به دیتابیس دومتون بریزید(که نمیدونم چرا؟!) میتونید اطلاعات رو به صورت صفحه بندی شده از دیتابیس مبدا دریافت کنید و بعد به دیتابیس مقصد بریزید. برای این کار از Thread استفاده کنید و یک Sleep بهش بدید.