C#Excel导入多条数据到数据库,如何快速导入?

C#Excel导入多条数据到数据库,如何快速导入?,第1张

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)

}

选中sql

server2005中的数据库,点击鼠标右键,选择任务,然后选择导入数据,然后点击下一步,然后在数据源中选择microsoft

excel,然后选择你要导入的excel的路径,excel版本请选择最高,在这里需要说的是,如果你的excel文件是2007的或者2010的,请你使用office将其存为2003的excel文件,也就是说,需要将xlsx文件存储为xls,然后点击下一步,然后选择你要导进的地址,也就是ip,如果是导入到本机就填

.

号,然后选择你要导进的数据库就好了,一步一步来,有提示的

希望我的回答对你会有帮助,如果以上回答没有解决你的问题,请追问详述,当然也可以直接

hi

我,我百度随时在线,解决问题后望即时采纳,谢谢!

1、直接用Sql语句查询

2、先用excle中的数据生成xml文件,再把xml导入数据库

第一种方法(方法二以后再试),找到联机丛书里实现此功能的Sql语句如下:

SELECT*

FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:Financeaccount.xls"UserID=AdminPassword=Extendedproperties=Excel5.0')...xactions

语句是有了,但我还是试了很久,因为各个参数具体该怎么设置它没有说。Data

Source就是excel文件的路径,这个简单UserId、Password和Extended

properties这三个属性我改成了各种各样的与本机有关的用户名、密码以及excel版本都不对,最后用上面例子里的值“User

ID=AdminPassword=Extended

properties=Excel

5.0”才成功了,晕啊最后个“xactions”更是查了很多资料,其实就仅仅是excel文件里所选的工作表名而已,怪我对excel不够熟悉了,另外注意默认的Sheet1要写成[Sheet1$]

最后,看看我成功的测试

数据库里建好一个表testTable_1,有5个字段id,

name,

date,

money,

content,C盘下book1.xls文件的sheet1工作表里写好对应的数据并设好数据类型,执行如下插入语句:

insertintotestTable_1([name],[date],[money],[content])

Select[姓名],[日期],[金额],[内容]

FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="C:Book1.xls"

UserID=AdminPassword=Extendedproperties=Excel5.0')...[Sheet1$]

select里的列名我一开始用*代替,但发现输出顺序与我预期的不同,是“金额、内容、日期、姓名”,不知道具体有什么规律,就老老实实写名字了。 *** 作成功

回过头来看看市场部的要求,假设在我这张表里实现,可以先判断如excel里存在与记录相同的name字段(name要唯一非空)时就删除记录,之后再插入,这样简单,但自增的id字段会因为插入而改变,那是不行的了。可行的方法是先读出excel里全部记录,然后用游标一条条分析,如果存在这个name就更新否则就插入。OK,下次就不用让他们再对着文档一条条Update了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9952789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存