View Full Version : insert به صورت Automatic از کامپیوتر ما روی سرور
rostamkhani
یک شنبه 24 آبان 1388, 12:18 عصر
سلام دوستان
من میخوام برنامه بنویسم کلی دستورات insert که هر کدوم 1mb و تعدادشم زیاده با زدن یک دگمه بفرسته روی دیتابیس سرور
اگه میشه راهنمایی کنید از چه روشی استفاده کنم ؟
چون حجم دستورات زیاده هست آیا روشی وجود راده که در این کار دستورات فشورده بشن
و بعد به mySql ارسال بشن ؟
آیا میشه ما یک mySql روی کامیوتر داشته باشیم اطلاعات در اون وارد بشن و بعد Export فشرده بگیریم ویا backup فشرده بگیریم و بعد این به mySql روی سرور فرستاده بشه و به اطلعات قبلی اضافه بشه
با تشکر
rostamkhani
سه شنبه 26 آبان 1388, 01:41 صبح
سلام
شرکت sun برای mySql خود یک سری Connectors نوشته که OpenSource هم هست
http://dev.mysql.com/downloads/connector/
اگر مثل من بخواهید در داتنت این اتصال رو انجام دهید میتونید از لینک زیر دانلود کنید (البته برای کشور عزیزمان مشکل دانلود داره)
http://dev.mysql.com/downloads/connector/net/
http://www.box.net/shared/83f3p25cdr mysql-connector-net-5.2.7.zip
http://www.box.net/shared/3ygoiy9prf mysql-connector-net-5.2.7-src.zip
http://www.box.net/shared/xcrf4ug7eb mysql-connector-net-5.2.7-noinstall.zip
مشکل اول یعنی اتصال با این ابزار حل میشه و شما میتونید به راحتی مثل ADO.net به دیتابیس mySql متصل بشید.
مشکل اصلی انتقال (Insert یا Select) حجم زیاد داده ها بود که این مسئله هم در این ابزار پیش بینی شده .
مشکل با 'Use Compression=True' در ConnectionString حل میشه
string strCon = "Server=122.122.122.122;
Username=aaaaaa; Password=123456;
database=dbName;Use Compression=True";
البته بهتر است برای Insert تعداد زیاد رکورد از دستور Sql زیر استفاده کنیم
درباره این دستور: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
String myInsertQuery = "LOAD DATA LOCAL INFILE 'c:/a.sql' INTO TABLE test"
+ " FIELDS TERMINATED BY ',' "//فیلدها با چه کارکتری از هم جدا شدن
+ " LINES TERMINATED BY '\r\n' "; //رکوردها با چه کارکتری از هم جدا شدن
نکته: در آدرس فایل روی هارد بجای \ (BackSlash) باید از / (Slash) استفاده کنید
یک مثال در داتنت
توسط این کد 200,000 رکورد با حجم حدود 9MB در 4ثانیه ارسال شد. Speed ADSL 256
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// رفرنس مورد نیاز http://dev.mysql.com/downloads/connector/net/6.1.html
// البته ما در این برنامه از ورژن 5.2 استفاده کردیم
using MySql.Data.MySqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//متن اتصال به همراه فشده سازی => Use Compression=True
string strCon = "Server=122.122.122.122; Username=aaaaaa; Password=123456; database=dbName;Use Compression=True";
// سازنده متن اتصال اگر نمیدونیم به چه صورت باید بنویسیم و اتصال چه امکاناتی ارائه میکند
//MySqlConnectionStringBuilder mysqlConbuild = new MySqlConnectionStringBuilder(strCon);
//mysqlConbuild.UseCompression = true;
//MessageBox.Show(mysqlConbuild.ConnectionString);
MySqlConnection conn = new MySqlConnection();
conn.ConnectionString = strCon;
conn.Open();
//MySql.Data.MySqlClient.MySqlDataAdapter da = new MySqlDataAdapter("select * from test", conn);
//DataTable dt = new DataTable();
//da.Fill(dt);
//dataGridView1.DataSource = dt;
String myInsertQuery = "LOAD DATA LOCAL INFILE 'c:/a.sql' INTO TABLE test"
+ " FIELDS TERMINATED BY ',' " // فیلدها با چه کارکتری از هم جدا شدن
+ " LINES TERMINATED BY '\r\n' "; // رکوردها با چه کارکتری از هم جدا شدن
DateTime dtime1 = DateTime.Now;
MySqlCommand myCommand = new MySqlCommand(myInsertQuery, conn);
myCommand.ExecuteNonQuery();
DateTime dtime2 = DateTime.Now;
this.Text = (dtime2 - dtime1).ToString();
conn.Close();
MessageBox.Show("OK");
}
}
}
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.