OleDbDataAdapter 读取Excel数据时出现错误 OleDbException至少一个参数没有被指定值
小弟用C#Winform做了个小系统,要从Excel表格中导入数据,问题就出在导入数据上,从网上搜索的代码,使用oledb来读取的,代码如下:
class excel2Sql
{
SqlHander sqlconn = new SqlHander();
public void SelectFile(string tableName)
{
//测试,将excel中的sheet1导入到sqlserver中
OpenFileDialog fd = new OpenFileDialog();
fd.InitialDirectory = "C:\\";
fd.Filter = "Excel files (*.xls)|*.xls";
if (fd.ShowDialog() == DialogResult.OK)
{
// TransferData(fd.FileName, "sheet1", tableName);
TransferData(fd.FileName, tableName);
}
}
//public void TransferData(string excelFile,string sheetName, string tableName)
public void TransferData(string excelFile, string tableName)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
//获取excel表
DataTable dataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
//获取sheet名,其中[0][1]…[N]: 按名称排列的表单元素
string sheetName = dataTable.Rows[0][2].ToString().Trim();
sheetName = "[" + sheetName.Replace("'", "") + "]";
OleDbDataAdapter myCommand = null;
// strExcel = string.Format("select * from {0}", sheetName);
strExcel = string.Format("select 进/出口,提单号,重20,吉20,重40,吉40,重45,吉45,截关时间,客户名称,重/吉,货柜总重,危品类别,是否税品,是否冷冻柜,免柜期,装柜点,卸柜点 from {0}", sheetName);
问题出在这:当使用strExcel = string.Format("select 进/出口....这个语句时,就出现上述错误,当使用strExcel = string.Format("select * from {0}", sheetName);时没有错误提示,但是这要求Excel表格的第一列要添加一列无关的列,否则导入的数据将会出现错位的情况,这一列对用户来说是完全没有必要的,请问 如何在去掉这一列的情况下还能不错位的导入数据?
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
//目标表有无数据都删除
sqlconn.ExecuteSQL("truncate table " + tableName);
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy("server=localhost;uid=sa;pwd=sa123;database=ShipArrange"))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//每次传输的行数
bcp.NotifyAfter = 100;//进度提示的行数
bcp.DestinationTableName = tableName;//目标表
bcp.WriteToServer(ds.Tables[0]);
}
MessageBox.Show("导入成功!", "提示信息:", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
catch (Exception ex)
{
MessageBox.Show("对不起,文件导入失败!请严格按照模板要求!", "