
نوشته شده توسط
babak23
با سلام من يه فايل متني دارم با حجم 35 مگا بايت اطلاعات اين فايل متني را ميتونم از طريق ويزارد اسكول به جداول اسكول سرور تبديل كنم و ......... اما من بيشتر دنبال كد سورسي هستم كه تو برنامه مبتني بر سي شارپ بتونه اين كار را به سرعت انجام بده يك روش خوندن فايل متني و ذخيره به صورت ركود به ركود هست اما با توجه به حجم فايل سرعت خيلي كندي خواهد داشت و معقولانه نيست عزيزان كسي هست كه بتونه كد سورس يا روش بهتري را ارائه بده كه بشه از طريق برنامه فايل هاي متني را به جداول هاي اسكول تبديل كرد با سرعت بالا

با سلام.
بهترین راه برای شما import مستقیم داده ها توسط خود سرور با استفاده از فرمان bulk insert است. شما می توانید در ساده ترین شکل این فرمان را به شکل زیر استفاده کنید:
bulk insert from 'c:\text.txt' with (FieldTerminator=',',RowTerminator='\')
در مثال زیر ابتدا یک جدول به نام test1 و با دوفیلد Id و name ساخته می شود. یک سری اطلاعات تصادفی در یک فایل متنی می نویسیم و سپس اطلاعات فایل متنی را در جدول وارد می کنیم.
مثال:
//بسم الله الرحمن الرحیم
//اللهم صل علی محمد و آل محمد
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;
using System.IO;
using System.Data.SqlClient;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
const string TextFileName = "e:\\temp\\Data.txt";
const string FieldSeparator = ",";
const string RowSeparator = "\\";
const string ConnectionString="server=.\\SqlExpress;integrated security=true;";
public Form1()
{
InitializeComponent();
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand command = new SqlCommand("", connection))
{
Action<string> execute = sql => { command.CommandText = sql; command.ExecuteNonQuery(); };
connection.Open();
execute("if(exists(select * from sys.tables where name='test1')) drop table test1;");
execute("create table test1(ID int identity,name NVarChar(100));");
//inserting random data into text file...
using (StreamWriter writer = new StreamWriter(TextFileName))
{
Random rand = new Random();
for (int i = 0; i <= 1000; i++)
{
writer.Write(i.ToString() + FieldSeparator +
((char)rand.Next(65, 92)).ToString() + RowSeparator);
}
writer.Close();
}
execute(string.Format( "bulk insert dbo.test1 from '{0}' with (FieldTerminator='{1}',RowTerminator='{2}');",Text FileName,FieldSeparator,RowSeparator));
command.CommandText = "select * from test1";
dataGridView1.DataSource = new DataTable();
(dataGridView1.DataSource as DataTable).Load(command.ExecuteReader());
connection.Close();
}//end use of command
} //end use of connection
}
}
}