PDA

View Full Version : سوال: خواندن اطلاعات از یک دیتابیس و انتقال به دیتابیس دیگر



ahmadzare75
چهارشنبه 28 آذر 1397, 18:00 عصر
با سلام امید وارم عنوان خوبی گذاشته باشم منظورم اینه دقیقا !

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

با فناوری ADO.NET یا حالا هرچیزی که شما پیشنهاد میدید.

میخوام اطلاعات رو از یک دیتابیس بخونم بریزم تو DATA Tabale بعد از اون DATA Tabale بخونم بریزم توی یک دیتابیس دیگه .

کسی کدی چیزی داره برام بزاره

ممنونم از کمکتون

voice.of.silence
چهارشنبه 28 آذر 1397, 21:33 عصر
سلام.
من خودم برای این کار ابتدا جدول مورد نظر رو از پایگاه داده ی اولی خواندم و وارد یک لیست کردم و سپس با استفاده از یک حلقه ی foreach عمل insert رو درون جدول مورد نظر پایگاه داده ی دومی انجام دادم.
و انتقال اطلاعات با موفقیت انجام شد.
البته من اطلاعات رو از پایگاه access وارد sql database کردم.

ahmadzare75
چهارشنبه 28 آذر 1397, 22:53 عصر
خیلی ممنونم ...

امکان داره براتون کدشو بهم بدین یا لینکی که توضیح داده باشه این کارو ؟

بسیار ممنونم :لبخندساده:

voice.of.silence
پنج شنبه 29 آذر 1397, 15:18 عصر
سلام دوست عزیز:
امیدوارم که این چند خط کد موثر باشد.
در پایگاه داده ی اولی لغات فارسی قرار دارد که نوع پایگاه Access است و آنها را ابتدا در برنامه وارد کردم و سپس توسط لیست از نوع رشته و با استفاده از حلقه ی foreach وارد پایگاه داده ی Sql کردم.
من برای اینکه کدها قابل درک باشد از راه طولانی استفاده کردم در صورتی می شد در چند خط کد عملیات را به سرانجام رساند.
خدا کند که کدها برایتان خوانا باشد.
موفق باشید.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;


namespace Persian_Vocabularies
{
public partial class frmtransfer : Form
{
public frmtransfer()
{
InitializeComponent();
}


private void btnload_Click(object sender, EventArgs e)
{
try
{
con_to_access.Open();
OleDbCommand ocmd = new OleDbCommand("select farsi from csdic",con_to_access);
OleDbDataAdapter oda = new OleDbDataAdapter(ocmd);
DataTable dt = new DataTable();
oda.Fill(dt);
if(dt.Rows.Count>0)
{
foreach(DataRow dr in dt.Rows)
{
lstdb1.Items.Add(dr[0].ToString());


}
//end of foreach and filling lstdb1.


}
//end of if checking and filling.


con_to_access.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}


private void btnwrite_Click(object sender, EventArgs e)
{
try
{
List<string> lst = new List<string>();

foreach (var item in lstdb1.Items)
{
lst.Add(item.ToString());
}
//end of filling lst using lstdb1 items.





foreach(var items in lst)
{
con_to_sql.Open();
SqlCommand scmd = new SqlCommand("insert into tbl_words(vocabulary)values(@vocab)", con_to_sql);
scmd.Parameters.AddWithValue("@vocab", items.ToString());
scmd.ExecuteNonQuery();
con_to_sql.Close();




}
//end of adding vocabulary from lst to scmd and inserting to DB2.


SqlCommand select_command = new SqlCommand("select vocabulary from tbl_words", con_to_sql);
SqlDataAdapter sda = new SqlDataAdapter(select_command);
DataTable dt = new DataTable();
sda.Fill(dt);
if(dt.Rows.Count>0)
{
foreach(DataRow dr in dt.Rows)
{
lstdb2.Items.Add(dr[0].ToString());


}
//end of foreach and selecting.


MessageBox.Show(lstdb2.Items.Count + " Words is exist in DB2.");


}
//the end.




}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
}
}
}

ahmadzare75
چهارشنبه 12 دی 1397, 23:23 عصر
یک سری چیز های کد نا مفهوم هست برام میشه راهنمایم کنید ؟

lstdb1 کجا تعریف شده یا چه شعی هست ؟ و lstdb2

چیزایی که فهمیدم : از دیتابیس Acc میخونه میریزه توی SQL

ممنونم احتمالا کدتون به دردم میخوره من میخوام از SQL به SQL اینکارو انجام بدم که خوب تغیرش میدم خودم

فقط شما همینارو برام بگید ممنون میشم

barnamenevisjavan
چهارشنبه 12 دی 1397, 23:40 عصر
اگر هدف تغییر دیتابیس هست بهتره به جای اینکار از برنامه های تبدیل دیتابیس استفاده کنین راحت و بدون دردسر

ahmadzare75
پنج شنبه 13 دی 1397, 18:04 عصر
نه دقیقا هدف همگام سازی چند جدول باهم هست . میخوام برنامه با دیتابیس آنلاین همگام بشه نه همیشه بعضی وقتا که نیازی به انترنت همیشگی نداشته باشه .

راهی دارید برای این کار راهنمایی کنید .

voice.of.silence
پنج شنبه 13 دی 1397, 19:26 عصر
یک سری چیز های کد نا مفهوم هست برام میشه راهنمایم کنید ؟

lstdb1 کجا تعریف شده یا چه شعی هست ؟ و lstdb2

چیزایی که فهمیدم : از دیتابیس Acc میخونه میریزه توی SQL

ممنونم احتمالا کدتون به دردم میخوره من میخوام از SQL به SQL اینکارو انجام بدم که خوب تغیرش میدم خودم

فقط شما همینارو برام بگید ممنون میشم
ابتدا اطلاعات از پایگاه داده ی Access خوانده می شه و به lstdb1 که یک لیستباکس است ریخته می شه و بعد از انتقال داده به پایگاه داده ی SQL مجددا از SQL خوانده شده و به lstdb2 که لیست باکس است می ریزه.
من برای خوانایی کدها از یان روش استفاده کردم اما به نظرم بهترین راه اینه که بدون نمایش اطلاعات مستقیما عملیات انتقال انجام شود و فقط با یک پیام به کاربر گذارش داده شود. البته برای سرعت زیاد.

esagraphic
دوشنبه 17 دی 1397, 19:54 عصر
بهترین راه استفاده از bulk copy است که تمام اطلاعات را با سرعت بسیار بالا به دیتابیس دومی که روی دگه کانکشن باشه انتقال میده شاید به ۱ ثانیه حدود ۲۰۰ هزار اطالاعات انتقال بده

voice.of.silence
سه شنبه 18 دی 1397, 16:05 عصر
سلام.
روش جالبی است. خوش حال می شم اگه بتونی یه مثال قرار بدی.
اخه من از یان روش استفاده نکردم.
با سپاس.