日期:2014-05-18 浏览次数:20922 次
DataSet ds = new DataSet(); try { //获取全部数据 string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFile); 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); //*一下为不明白的地方,请哪位懂的帮我家一下注释(注释越多越好) //如果目标表不存在则创建,excel文件的第一行为列标题,从第二行开始全部都是数据记录 string strSql = string.Format("if object('{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();//报异常--'&'附近有语法错误,即strSql的取值问题 sqlconn.Close(); } //*/ 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 e) { MessageBox.Show(e.Message); }
string strSql = string.Format("if object('{0}')is null create table {0}(",sheetName);
------解决方案--------------------
转义字符的问题啊,
看看这个了解一下,常用的一些转义字符吧
http://www.cnblogs.com/jialine/archive/2006/10/12/527736.html