在 Excel 中录入好数据以后,可能会有导入数据库的需求,这个时候就需要利用一些技巧导入。接下来是我为大家带来的如何将excel表导入数据库的 方法 ,希望对你有用。
将excel表导入数据库的方法Excel导入数据库步骤1:对于把大量数据存放到数据库中,最好是用图形化数据库管理工具,可是如果没有了工具,只能执行命令的话这会是很费时间的事。那我们只能对数据进行组合,把数据组成insert语句然后在命令行中批量直行即可。
Excel导入数据库步骤2:我们对下面数据进行组合,这用到excel中的一个功能。
在excel中有个fx的输入框,在这里把组好的字符串填上去就好了。
注:字符串1 &A2 &字符串2 &...
A2可以直接输入,也可以用鼠标点对应的单元格。
Excel导入数据库步骤3:每个字符串之间用 &符号进行连接。下面是第一条连接字符串
="insert into tavern values('"&A2&"','"&B2&"','"&C2&"','"&D2&"')"
写好后按回车键Enter就能组合出对应的字符串了。
insert into tavern values('jw_agi','曙光','0','1')
Excel导入数据库步骤4:组好第一行的字符串后,把鼠标放到单元格右下方,出现加粗的十字,单击按下(别松开),一直往下拉,直到最后一行再放开就行了。
5这样我们就把insert语句都整理好了,接下来就是大家把这些语句批量执行就可以了。
>>>下一页更多精彩“将EXCEL表格数据导入进CAD中的方法”public static DataSet GetDataSet(string FilePath)
{
string OledbConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0Data Source='" + FilePath + "'Extended Properties='Excel 8.0HDR=YesIMEX=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 = 0i <dtExcelSchema.Rows.Counti++)
{
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 = 0i <SheetNameList.Counti++)
{
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)
}
1.本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要4.5秒。\x0d\x0a2.代码如下:\x0d\x0ausing System \x0d\x0ausing System.Data \x0d\x0ausing System.Windows.Forms \x0d\x0ausing System.Data.OleDb \x0d\x0anamespace WindowsApplication2 \x0d\x0a{ \x0d\x0apublic partial class Form1 : Form \x0d\x0a{ \x0d\x0apublic Form1() \x0d\x0a{ \x0d\x0aInitializeComponent() \x0d\x0a} \x0d\x0a\x0d\x0aprivate void button1_Click(object sender, EventArgs e) \x0d\x0a{ \x0d\x0a//测试,将excel中的sheet1导入到sqlserver中 \x0d\x0astring connString = "server=localhostuid=sapwd=sqlgisdatabase=master" \x0d\x0aSystem.Windows.Forms.OpenFileDialog fd = new OpenFileDialog() \x0d\x0aif (fd.ShowDialog() == DialogResult.OK) \x0d\x0a{ \x0d\x0aTransferData(fd.FileName, "sheet1", connString) \x0d\x0a} \x0d\x0a} \x0d\x0a\x0d\x0apublic void TransferData(string excelFile, string sheetName, string connectionString) \x0d\x0a{ \x0d\x0aDataSet ds = new DataSet() \x0d\x0atry\x0d\x0a{ \x0d\x0a//获取全部数据 \x0d\x0astring strConn = "Provider=Microsoft.Jet.OLEDB.4.0" + "Data Source=" + excelFile + "" + "Extended Properties=Excel 8.0" \x0d\x0aOleDbConnection conn = new OleDbConnection(strConn) \x0d\x0aconn.Open() \x0d\x0astring strExcel = "" \x0d\x0aOleDbDataAdapter myCommand = null \x0d\x0astrExcel = string.Format("select * from [{0}$]", sheetName) \x0d\x0amyCommand = new OleDbDataAdapter(strExcel, strConn) \x0d\x0amyCommand.Fill(ds, sheetName) \x0d\x0a\x0d\x0a//如果目标表不存在则创建 \x0d\x0astring strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName) \x0d\x0aforeach (System.Data.DataColumn c in ds.Tables[0].Columns) \x0d\x0a{ \x0d\x0astrSql += string.Format("[{0}] varchar(255),", c.ColumnName) \x0d\x0a} \x0d\x0astrSql = strSql.Trim(',') + ")" \x0d\x0a\x0d\x0ausing (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString)) \x0d\x0a{ \x0d\x0asqlconn.Open() \x0d\x0aSystem.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand() \x0d\x0acommand.CommandText = strSql \x0d\x0acommand.ExecuteNonQuery() \x0d\x0asqlconn.Close() \x0d\x0a} \x0d\x0a//用bcp导入数据 \x0d\x0ausing (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString)) \x0d\x0a{ \x0d\x0abcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied) \x0d\x0abcp.BatchSize = 100//每次传输的行数 \x0d\x0abcp.NotifyAfter = 100//进度提示的行数 \x0d\x0abcp.DestinationTableName = sheetName//目标表 \x0d\x0abcp.WriteToServer(ds.Tables[0]) \x0d\x0a} \x0d\x0a} \x0d\x0acatch (Exception ex) \x0d\x0a{ \x0d\x0aSystem.Windows.Forms.MessageBox.Show(ex.Message) \x0d\x0a}\x0d\x0a} \x0d\x0a\x0d\x0a//进度显示 \x0d\x0avoid bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e) \x0d\x0a{ \x0d\x0athis.Text = e.RowsCopied.ToString() \x0d\x0athis.Update() \x0d\x0a}\x0d\x0a} \x0d\x0a} \x0d\x0a3.上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)