我有Excel 2007和Visual Web Developer Express 2010。 我想导入xlsx文件的Sheet1然后将数据添加到数据集并将数据放入MS SQL数据库。
string ExcelConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";
string SQLConStr = "got connection string that works";
OleDbConnection ExcelConnection = new OleDbConnection(ExcelConStr);
using (ExcelConnection)
{
string sql = string.Format("Select * FROM [{0}]", "Sheet1$");
OleDbCommand command = new OleDbCommand(sql, ExcelConnection);
ExcelConnection.Open();
using (OleDbDataReader dr = command.ExecuteReader())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLConStr))
{
bulkCopy.DestinationTableName = "dbo.databaseName";
bulkCopy.WriteToServer(dr);
}
}
}
如果有人可以提出建议,我需要像批量复制这样免费且易于使用的东西。
答案 0 :(得分:7)
如果没有批量复制,它也可以正常工作..试试这个。它将100%用于.csv和.xlsx两者......我正在使用它..
string header = "No";
string sql = string.Empty;
DataTable dt = new DataTable();
string pathOnly = string.Empty;
string fileName = string.Empty;
pathOnly = Path.GetDirectoryName(path);
fileName = Path.GetFileName(path);
if (IsFirstRowHeader) { header = "Yes"; }
String cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=" + header + ";IMEX=1;\"";
OleDbConnection con = new OleDbConnection(cs);
if (con.State == ConnectionState.Closed) con.Open();
#region use to find sheet and fire query on sheetname
DataTable dtsheets = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
String[] excelSheets = new String[dtsheets.Rows.Count];
int i = 0;
// Add the sheet name to the string array.
foreach (DataRow row in dtsheets.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
if (extension == ".csv") sql = "SELECT * FROM [" + fileName + "]";
else sql = "SELECT * FROM [" + excelSheets[0] + "]";
#endregion
OleDbCommand command = new OleDbCommand(sql, con);
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
dt.Locale = CultureInfo.CurrentCulture;
adapter.Fill(dt);
con.Close();