PDA

View Full Version : اضافه کردن یوزرهای mysql به sql server



Sp|R|T
یک شنبه 29 آبان 1390, 14:22 عصر
سلام

من یه برنامه چت راه اندازی کردم که هم راه با سیستم ثبت نام هستش

همه چی درس کار میکنه و حالا میخوام اگر کسی از طریق سایتم که از mysql استفاده میکنه ثبت نام کنه بصورت خودکار این یوزر داخل sql server برنامم اضافه بشه

این کار رو بصورت برعکسش انجام دادم یعنی اگر کسی از طریق برنامه ثبت نام کنه توی هر دو دیتابیس ( mysql و sql server ) یوزر اضافه میشه

ولی اگر کسی از طریق سایتم ثبت نام کنه توی دیتابیس برنامم اضافه نمیشه !

فقط یه کد میخوام خودش توی تیبل users بگرده و ببینه که اگر یوزر جدیدی اضافه شده ، این یوزر به sql serer اضافه بشه

تشکر

Amir Oveisi
دوشنبه 30 آبان 1390, 18:53 عصر
نحوه کار مثل کار با MS SQL SERVER‌هست و فرقی نمی کنه. (البته با شیوه ADO .NET)
کافیه library رایگان mysql واسه دات نت رو به رفرنس های برنامتون اضافه کنید و بعد بقیه مراحل مانند کار با ms sql server هست. مثلا به جای کلاس SqlConnection این بار MySqlConnection خواهید داشت.
مثال:
http://bitdaddys.com/MySQL-ConnectorNet.html

Sp|R|T
دوشنبه 30 آبان 1390, 19:17 عصر
نحوه کار مثل کار با MS SQL SERVER‌هست و فرقی نمی کنه. (البته با شیوه ADO .NET)
کافیه library رایگان mysql واسه دات نت رو به رفرنس های برنامتون اضافه کنید و بعد بقیه مراحل مانند کار با ms sql server هست. مثلا به جای کلاس SqlConnection این بار MySqlConnection خواهید داشت.
مثال:
http://bitdaddys.com/MySQL-ConnectorNet.html

تشکر بابت جوابتون

ولی من مشکلم یه چیزه دیگس

من کلآ با نحوه fill کردن تیبل ها و insert / delete / select و و و این ها همش آشنا هستم

من مشکلم اینه که نمیتونم به سایتم(php) بگم که یوزر جدیدی که از طریق خوده سایت ساخته میشه، یوزر رو هم توی دیتابیس خودت که از mysql استفاده میکنه ذخیره کنه و هم توی دیتابیس برنامه که از sql server استفاده میکنه ذخیره !

در صورتی که من به برنامم گفتم که یوزی که از طریق خوده برنامه ساخته میشه هم توی mysql ذخیره بشه و هم توی sql server ! و در این بابت هیچ مشکلی ندارم

خب حالا برای این کار من باید یه کدی داخل سی شارپم قرار بدم که خودش توی دیتابیس سایتم(mysql) بگرده و یوزرها رو چک و ببینه اگر یوزری وجود داره که در sql server نیستش، این یوزر رو به sql server اضافه کنه

Amir Oveisi
دوشنبه 30 آبان 1390, 20:14 عصر
خوب برای این کار یک روش مناسب این هست که یک web service بنویسید و اون رو روی سایت قرار بدید بعد یک وب رفرنس ازش به رفرنس های برنامتون اضافه کنید. داخل وب سرویس یک متد بنویسید که از داخل دیتابیس mysql سایت (که برای وب سرویس local حساب میشه چون خودشم رو سرور هست) user ها رو در بیاره و برگردونه. در داخل برنامتون هر جا لازم داشتید از طریق وب رفرنسی که دارید اون متد رو فراخوانی می کنید و از مقدار برگشت داده شده (که مثلا لیستی از user ها هست) استفاده می کنید.
روش دیگه برای اینکار ارتباط مستقیم با دیتابیس روی سایت با استفاده از connection string‌ هست. یعنی کاملا مثل دیتابیس local‌ باهاش رفتار میکنید و فقط connection string‌اتون شما رو به دیتابیس سایت متصل می کنه.
اما امنیت روش اول خیلی بهتره.

Sp|R|T
دوشنبه 30 آبان 1390, 22:32 عصر
تشکر مدیر،

من از نظر امنیت اومدم این کار رو انجام دادم که کلاینت به سرور متصل و سرور یه دیتابیس وصل میشه
در واقع کلاینت هیچ دسترسی به دیتابیس نداره! و فقط سرور ارتباط مستقیم با دیتابیس ها داره ! که از connection string هم استفاده کردم

خب الان ارتباط مستقیم هستش؛ چطور میتونم یوزرهای جدید داخل mysql رو به sql server اضافه کنم ؟

بنظرم سوال بسیار ساده ای هستش ولی یکم گیج شدم

خودم اومدم یه کد نوشتم که این کار رو انجام میداد:

مقدار اولین داده در تیبل users در mysql رو داخل یک آرایه قرار میداد و سپس این آرایه توسط کد addwithvalue مقدار اولین داده (یعنی مثلا اولین یوزری که ساخته شده) به sql server اضافه میکردم

خب مشکل اینجاست که دیگر یوزر ها رو اضافه نمیکنه

تا این قسمتش جلو رفتم، بنظرتون باید چیکار کنم ؟

Amir Oveisi
سه شنبه 01 آذر 1390, 00:55 صبح
خوب شما مگه تو جدول users اطلاعات کاربرها رو نگهداری نمی کنید؟
کلیه رکورد های users‌رو select کنید و جواب query‌رو با datareader‌ بخونید و بعد به هر شکلی که خواستید داخل دیتابیس دوم ذخیره کنید.
من منظور شما رو از اولین داده متوجه نشدم

Sp|R|T
سه شنبه 01 آذر 1390, 14:21 عصر
من الان این برنامه رو ساختم:

http://social.microsoft.com/Forums/getfile/36257/


وقتی روی دکمه <=== کلیک میکنم یوزر اضافه میشه و هیچ میشکلی نداره

http://social.microsoft.com/Forums/getfile/36259/


ولی من میخوام این کار بصورت خودکار انجام بشه( بدون کلیک کردن روی دکمه)

فقط مشکلم همینه

این هم کد:
//برای پر کردن داخل تکست باکس ها (sql server)
void FillData() {
SqlConnection Conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ServerDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlDataAdapter da = new SqlDataAdapter("Select UserName, UName, UEmail, Password From Users", Conn);
DataSet ds = new DataSet();
da.Fill(ds, "t1");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "t1";
txbNickName.DataBindings.Clear();
txbEmail.DataBindings.Clear();
txbPassword.DataBindings.Clear();
txbName.DataBindings.Clear();
txbNickName.DataBindings.Add("Text", ds, "t1.username");
txbEmail.DataBindings.Add("Text", ds, "t1.UEmail");
txbPassword.DataBindings.Add("Text", ds, "t1.Password");
txbName.DataBindings.Add("Text", ds, "t1.UName"); }
//برای پر کردن داخل تکست باکس ها
(MYSQL) void FillData2() {
MySqlConnection Conn2 = new MySqlConnection(@"Server=127.0.0.1;Port=3306;Datab ase=test;User ID=root;Password=;CharSet=utf8");
MySqlDataAdapter da = new MySqlDataAdapter("Select username , fullname , email , password From users", Conn2);
DataSet ds = new DataSet();
da.Fill(ds, "t1");
dataGridView2.DataSource = ds;
dataGridView2.DataMember = "t1";
txbNickName2.DataBindings.Clear();
txbEmail2.DataBindings.Clear();
txbName2.DataBindings.Clear();
txbPassword2.DataBindings.Clear();
txbNickName2.DataBindings.Add("Text", ds, "t1.username");
txbEmail2.DataBindings.Add("Text", ds, "t1.email");
txbName2.DataBindings.Add("Text", ds, "t1.fullname");
txbPassword2.DataBindings.Add("Text", ds, "t1.password"); }
//insert '===>'
private void insert_Click(object sender, EventArgs e)
{
SqlConnection Conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ServerDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand Cmd = new SqlCommand(@"Insert Into Users (UserName, Password, UName, UEmail) Values (@UserName, @Password, @UName, @UEmail)", Conn);
Cmd.Parameters.AddWithValue("@UserName", txbNickName2.Text);
Cmd.Parameters.AddWithValue("@Password", txbPassword2.Text);
Cmd.Parameters.AddWithValue("@UName", txbName2.Text);
Cmd.Parameters.AddWithValue("@UEmail", txbEmail2.Text);
if (Conn.State == ConnectionState.Closed)
{
Conn.Open(); } try { Cmd.ExecuteNonQuery();
FillData();
} catch { }
}

Amir Oveisi
سه شنبه 01 آذر 1390, 16:07 عصر
الان با یک کلیک همه کاربر ها اضافه میشن؟

Sp|R|T
سه شنبه 01 آذر 1390, 16:25 عصر
الان با یک کلیک همه کاربر ها اضافه میشن؟

خیر!
اگر شما دقت کرده باشین من مقدار هایی که داخل تکست باکس ها رو نشون میده رو اینسترت کردم

یعنی اول روی دیتاگریدویو کلیک میکنم ، بعد یوزری که روش کلیک کردم رو در تکست باکس ها نشون داد سپس روی دکمه کلیک میکنم و اینسرت میشه

که فایده ای نداره... :-s

Amir Oveisi
سه شنبه 01 آذر 1390, 16:35 عصر
آها! حالا تازه فهمیدم مشکل چیه! (چقدر با چیزی که تو پست اول فکر می کردم فرق داشت lol‌ )
ولی باز هم جواب قبلی که دادم میشه راه حل شما. کار خاصی نیاز نیست انجام بدید.
یک query بنویسید که کلیه user ها رو از table‌به نام users در دیتابیس mysql بخونه. بعد یه command بسازید برای این query و اونو executeReader کنید. با این کار کل user ها رو میتونید دریافت کنید از دیتابیس mysql.
حالا که اطلاعات user ها رو دارید داخل شی sqlDataReader کافیه تک تک اونا رو مثلا با یک حلقه به دیتابیس ms sql اتون insert‌ کنید.

برای کل این کار یک متد بنویسد و هر جا که نیاز داشتید فراخوانیش کنید.

Sp|R|T
سه شنبه 01 آذر 1390, 17:08 عصر
آها! حالا تازه فهمیدم مشکل چیه! (چقدر با چیزی که تو پست اول فکر می کردم فرق داشت lol‌ )
ولی باز هم جواب قبلی که دادم میشه راه حل شما. کار خاصی نیاز نیست انجام بدید.
یک query بنویسید که کلیه user ها رو از table‌به نام users در دیتابیس mysql بخونه. بعد یه command بسازید برای این query و اونو executeReader کنید. با این کار کل user ها رو میتونید دریافت کنید از دیتابیس mysql.
حالا که اطلاعات user ها رو دارید داخل شی sqlDataReader کافیه تک تک اونا رو مثلا با یک حلقه به دیتابیس ms sql اتون insert‌ کنید.

برای کل این کار یک متد بنویسد و هر جا که نیاز داشتید فراخوانیش کنید.

میشه خودتون زحمتش رو بکشید ؟ چون نمیدونم چطور میشه تمامی یوزرها رو گرفت

شرمنده

Sp|R|T
سه شنبه 01 آذر 1390, 18:16 عصر
تشکر امیر خان :قلب:

تونستم انجامش بدم

این کد:

private void button3_Click(object sender, EventArgs e)
{
MySqlConnection Conn = new MySqlConnection(@"Server=127.0.0.1;Port=3306;Database=test;User ID=root;Password=;CharSet=utf8");

Conn.Open();

MySqlCommand command = new MySqlCommand("Select username , fullname , email , password From users", Conn);
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{

SqlConnection Conn2 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\ServerDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand Cmd = new SqlCommand(@"Insert Into Users (UserName, Password, UName, UEmail, SecurityQuestion, Answer) Values
(@UserName, @Password, @UName, @UEmail, 'sec', 'ans')", Conn2);

Cmd.Parameters.AddWithValue("@UserName", reader.GetString(0));
Cmd.Parameters.AddWithValue("@UName", reader.GetString(1));
Cmd.Parameters.AddWithValue("@UEmail", reader.GetString(2));
Cmd.Parameters.AddWithValue("@Password", reader.GetString(3));

if (Conn2.State == ConnectionState.Closed)
{
Conn2.Open();
}
try
{
Cmd.ExecuteNonQuery();
FillData();
Conn2.Close();
}
catch
{

}
}

Conn.Close();
}

خب الان من اینو روی یک دکمه گذاشتم

توی یک تایمیر قرار بدم ؟ بگم هر یک دیقه یه بار این کد اجرا بشه ؟ :لبخند::لبخند: دیتابیس .... سی پی یو .... رم ... چیزیش نمیشه ؟ :لبخند:

نمیشه اتوماتیک یه کاری کرد تا یه یوزر توی MySQL اضافه توی اون دیتابیس دیگه هم اضافه بشه ؟ :متفکر: