如题,现在有一Excel表,数据量大,需要通过C#语句批量导入至SQL数据库代码应该怎么写?最好详细点,先谢谢了!
代ç å¦ä¸ï¼
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//æµè¯ï¼å°excelä¸çsheet1å¯¼å ¥å°sqlserverä¸
string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master";
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
TransferData(fd.FileName, "sheet1", connString);
}
}
public void TransferData(string excelFile, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//è·åå ¨é¨æ°æ®
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
//å¦æç®æ 表ä¸åå¨åå建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
foreach (System.Data.DataColumn c in ds.Tables[0].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//ç¨bcpå¯¼å ¥æ°æ®
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//æ¯æ¬¡ä¼ è¾çè¡æ°
bcp.NotifyAfter = 100;//è¿åº¦æ示çè¡æ°
bcp.DestinationTableName = sheetName;//ç®æ 表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
//è¿åº¦æ¾ç¤º
void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
{
this.Text = e.RowsCopied.ToString();
this.Update();
}
}
}
3.ä¸é¢çTransferDataåºæ¬å¯ä»¥ç´æ¥ä½¿ç¨ï¼å¦æè¦èèå¨å ¨çè¯ï¼å¯ä»¥ç¨oledbæ¥è·åexcelç表ç»æï¼å¹¶ä¸å å ¥ColumnMappingsæ¥è®¾ç½®å¯¹ç §å段ï¼è¿æ ·ææå°±å®å ¨å¯ä»¥åå°åsqlserverçdtsç¸åçææäºã
SQL Server æ¯Microsoft å ¬å¸æ¨åºçå ³ç³»åæ°æ®åºç®¡çç³»ç»ãå ·æ使ç¨æ¹ä¾¿å¯ä¼¸ç¼©æ§å¥½ä¸ç¸å ³è½¯ä»¶éæç¨åº¦é«çä¼ç¹ï¼å¯è·¨è¶ä»è¿è¡Microsoft Windows 98 çèä¸åçµèå°è¿è¡Microsoft Windows 2012 ç大åå¤å¤çå¨çæå¡å¨çå¤ç§å¹³å°ä½¿ç¨ã
Microsoft SQL Server æ¯ä¸ä¸ªå ¨é¢çæ°æ®åºå¹³å°ï¼ä½¿ç¨éæçåä¸æºè½ (BI)å·¥å ·æä¾äºä¼ä¸çº§çæ°æ®ç®¡çãMicrosoft SQL Server æ°æ®åºå¼æä¸ºå ³ç³»åæ°æ®åç»æåæ°æ®æä¾äºæ´å®å ¨å¯é çåå¨åè½ï¼ä½¿æ¨å¯ä»¥æ建å管çç¨äºä¸å¡çé«å¯ç¨åé«æ§è½çæ°æ®åºç¨ç¨åºã
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//æµè¯ï¼å°excelä¸çsheet1å¯¼å ¥å°sqlserverä¸
string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master";
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
TransferData(fd.FileName, "sheet1", connString);
}
}
public void TransferData(string excelFile, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//è·åå ¨é¨æ°æ®
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
//å¦æç®æ 表ä¸åå¨åå建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
foreach (System.Data.DataColumn c in ds.Tables[0].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//ç¨bcpå¯¼å ¥æ°æ®
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//æ¯æ¬¡ä¼ è¾çè¡æ°
bcp.NotifyAfter = 100;//è¿åº¦æ示çè¡æ°
bcp.DestinationTableName = sheetName;//ç®æ 表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
//è¿åº¦æ¾ç¤º
void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
{
this.Text = e.RowsCopied.ToString();
this.Update();
}
}
}
3.ä¸é¢çTransferDataåºæ¬å¯ä»¥ç´æ¥ä½¿ç¨ï¼å¦æè¦èèå¨å ¨çè¯ï¼å¯ä»¥ç¨oledbæ¥è·åexcelç表ç»æï¼å¹¶ä¸å å ¥ColumnMappingsæ¥è®¾ç½®å¯¹ç §å段ï¼è¿æ ·ææå°±å®å ¨å¯ä»¥åå°åsqlserverçdtsç¸åçææäºã
SQL Server æ¯Microsoft å ¬å¸æ¨åºçå ³ç³»åæ°æ®åºç®¡çç³»ç»ãå ·æ使ç¨æ¹ä¾¿å¯ä¼¸ç¼©æ§å¥½ä¸ç¸å ³è½¯ä»¶éæç¨åº¦é«çä¼ç¹ï¼å¯è·¨è¶ä»è¿è¡Microsoft Windows 98 çèä¸åçµèå°è¿è¡Microsoft Windows 2012 ç大åå¤å¤çå¨çæå¡å¨çå¤ç§å¹³å°ä½¿ç¨ã
Microsoft SQL Server æ¯ä¸ä¸ªå ¨é¢çæ°æ®åºå¹³å°ï¼ä½¿ç¨éæçåä¸æºè½ (BI)å·¥å ·æä¾äºä¼ä¸çº§çæ°æ®ç®¡çãMicrosoft SQL Server æ°æ®åºå¼æä¸ºå ³ç³»åæ°æ®åç»æåæ°æ®æä¾äºæ´å®å ¨å¯é çåå¨åè½ï¼ä½¿æ¨å¯ä»¥æ建å管çç¨äºä¸å¡çé«å¯ç¨åé«æ§è½çæ°æ®åºç¨ç¨åºã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-09-12
public static DataSet GetDataSet(string FilePath)
{
string OledbConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + FilePath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
OleDbConnection conn = new OleDbConnection(OledbConnectionString);
ArrayList SheetNameList = new ArrayList();
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
DataTable dtExcelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string SheetName = "";
for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
{
SheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
SheetNameList.Add(SheetName);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
DataSet dsExcel = new DataSet(); try
{
string strSql = ""; for (int i = 0; i < SheetNameList.Count; i++)
{
strSql = "select * from [" + (string)SheetNameList[i] + "]";
OleDbDataAdapter oleExcelDataAdapter = new OleDbDataAdapter(strSql, conn);
DataTable dtExcel = new DataTable((string)SheetNameList[i]);
oleExcelDataAdapter.Fill(dtExcel);
dsExcel.Tables.Add(dtExcel);
}
return dsExcel;
}
catch (Exception ex)
{
throw ex;
}
}这个方法就是从EXCEL文件读取数据转换为DataSet 下面一段时调用的时候要注意的,写要在服务器端保存一下上传的EXCEL,然后再调用 string filePath = "";
DataSet ds = new DataSet();
if (System.IO.Path.GetExtension(FileUpload1.FileName) != ".xls")
{
ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alter('hao')</script>");
return;
}
else
{
filePath = "D:\\" + FileUpload1.FileName;
FileUpload1.SaveAs(filePath);
string fileName = FileUpload1.FileName;
int start = fileName.IndexOf('.');
fileName = fileName.Substring(0, start);
ds = GetDataSet(filePath);
}如果有不明白的地方可以直接加我QQ ,326224214本回答被网友采纳
{
string OledbConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + FilePath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
OleDbConnection conn = new OleDbConnection(OledbConnectionString);
ArrayList SheetNameList = new ArrayList();
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
DataTable dtExcelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string SheetName = "";
for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
{
SheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
SheetNameList.Add(SheetName);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
DataSet dsExcel = new DataSet(); try
{
string strSql = ""; for (int i = 0; i < SheetNameList.Count; i++)
{
strSql = "select * from [" + (string)SheetNameList[i] + "]";
OleDbDataAdapter oleExcelDataAdapter = new OleDbDataAdapter(strSql, conn);
DataTable dtExcel = new DataTable((string)SheetNameList[i]);
oleExcelDataAdapter.Fill(dtExcel);
dsExcel.Tables.Add(dtExcel);
}
return dsExcel;
}
catch (Exception ex)
{
throw ex;
}
}这个方法就是从EXCEL文件读取数据转换为DataSet 下面一段时调用的时候要注意的,写要在服务器端保存一下上传的EXCEL,然后再调用 string filePath = "";
DataSet ds = new DataSet();
if (System.IO.Path.GetExtension(FileUpload1.FileName) != ".xls")
{
ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alter('hao')</script>");
return;
}
else
{
filePath = "D:\\" + FileUpload1.FileName;
FileUpload1.SaveAs(filePath);
string fileName = FileUpload1.FileName;
int start = fileName.IndexOf('.');
fileName = fileName.Substring(0, start);
ds = GetDataSet(filePath);
}如果有不明白的地方可以直接加我QQ ,326224214本回答被网友采纳
第2个回答 2013-09-12
如果对应数据库中表的列, 直接复制就可以、