Extended Properties='Excel 80;HDR=NO;IMEX=1'
//HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes;通过Imex=1来把混合型作为文本型读取,避免 null值。上句的左右两个单引号不能少。
HDR=YES 有两个值:YES/NO,表示第一行是否字段名,默认是YES,第一行是字段名
IMEX=1 解决数字与字符混合时,识别不正常的情况
由于项目中加入了新的功能,可以使管理员向数据库中导入Excel数据。因此,在商品管理这块需要对Excel进行 *** 作,在网上查了些资料,根据项目的实际情况进行了一定的优化,这里简单的介绍下。
1C#代码。
<span style="font-family:Microsoft YaHei;font-size:18px;">/// <summary>
/// 上传Excel文件,并将数据导入到数据库
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtnSure_Click(object sender, EventArgs e)
{
// 定义变量,并赋初值
string url = thisfileUpLoadPostedFileFileName;
string urlLocation = "";
// 判断传输地址是否为空
if (url == "")
{
// 提示“请选择Excel文件”
PageClientScriptRegisterStartupScript(PageGetType(), "message", "<script defer>alert('请选择97~2003版Excel文件!');</script>");
return;
}
// 判断获取的是否为地址,而非文件名
if (urlIndexOf("\\") > -1)
{
// 获取文件名
urlLocation = urlSubstring(urlLastIndexOf("\\") + 1);//获取文件名
}
else
{
// url为文件名时,直接获取文件名
urlLocation = url;
}
// 判断指定目录下是否存在文件夹,如果不存在,则创建
if (!DirectoryExists(ServerMapPath("~\\up")))
{
// 创建up文件夹
DirectoryCreateDirectory(ServerMapPath("~\\up"));
}
//在系统中建文件夹up,并将excel文件另存
thisfileUpLoadSaveAs(ServerMapPath("~\\up") + "\\" + urlLocation);//记录文件名到服务器相对应的文件夹中
// ResponseWrite(urlLocation);
// 取得保存到服务器端的文件路径
string strpath = ServerMapPath("~\\up") + "\\" + urlLocation;
// 取得config中的字段
string connectionString = ConfigurationManagerAppSettings["Connect"]ToString();
string strCon = ConfigurationManagerAppSettings["strUpLoad"]ToString();
// 替换变量
strCon = strConReplace("$Con$", strpath);
// 初始化导入Excel对象
ImportExcel excel = new ImportExcel();
// 调用方法,将Excel文件导入数据库
excelTransferData(strCon, "t_Goods", connectionString);
}</span>
2TransferData类。
<span style="font-family:Microsoft YaHei;font-size:18px;">public void TransferData(string strCon, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
OleDbConnection conn = new OleDbConnection(strCon);
connOpen();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = stringFormat("select from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommandFill(ds, sheetName);
//如果目标表不存在则创建,excel文件的第一行为列标题,从第二行开始全部都是数据记录
string strSql = stringFormat("if not exists(select from sysobjects where name = '{0}') create table {0}(", sheetName); //以sheetName为表名
foreach (SystemDataDataColumn c in dsTables[0]Columns)
{
strSql += stringFormat("[{0}] varchar(255),", cColumnName);
}
strSql = strSqlTrim(',') + ")";
using (SystemDataSqlClientSqlConnection sqlconn = new SystemDataSqlClientSqlConnection(connectionString))
{
sqlconnOpen();
SystemDataSqlClientSqlCommand command = sqlconnCreateCommand();
commandCommandText = strSql;
commandExecuteNonQuery();
sqlconnClose();
}
//用bcp导入数据
//excel文件中列的顺序必须和数据表的列顺序一致,因为数据导入时,是从excel文件的第二行数据开始,不管数据表的结构是什么样的,反正就是第一列的数据会插入到数据表的第一列字段中,第二列的数据插入到数据表的第二列字段中,以此类推,它本身不会去判断要插入的数据是对应数据表中哪一个字段的
using (SystemDataSqlClientSqlBulkCopy bcp = new SystemDataSqlClientSqlBulkCopy(connectionString))
{
bcpSqlRowsCopied += new SystemDataSqlClientSqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcpBatchSize = 100;//每次传输的行数
bcpNotifyAfter = 100;//进度提示的行数
bcpDestinationTableName = sheetName;//目标表
bcpWriteToServer(dsTables[0]);
}
}
catch (Exception ex)
{
throw new Exception(ex);
}
}
//进度显示
void bcp_SqlRowsCopied(object sender, SystemDataSqlClientSqlRowsCopiedEventArgs e)
{
}
} </span>
4Web界面样式。
你好,看了你的截图,觉得你是把数据类型搞错了。
在Excel里面靠右显示的是数字型,靠左显示的是字符型,所以,在你的Excel中存储的第一列和第四列都是数值型的,这和你的数据库定义不符。所以你可以尝试调整一下Excel的字段属性。
1:导入的语句怎么写?insert into tableselect from OpenRowSet('microsoftjetoledb40','Excel 80;HDR=yes;database=c:\1xls;','select from [table$]') 这是全字段导入,如果你想导入部分字段则把 改成你要导入的字段2对excel中的数据有什么要求? 例如:能否有空格? 同一列的数据能否有重复的?excel没什么特别的要求,类似能否有重复,空格之类的则是看你的想导入的那个数据库的设计了3数据库如何设计? 例如:数据库中的字段类型以及名称是否应该和excel中的保持一致? 默认的是怎样导入呢?是不是表中的第一列默认导入到数据库中的第一个字段里?如果你是用select 方式导入的话 可以不用名称对应,如果是 select 字段的则最好是对应,对类型没特殊要求,默认第一列为第一个字段---------------------------------------------------------------建议:SQL server是有导入导出工具的,你直接用那个比较好
以上就是关于excel数据导入sql server 2008 导进去后顺序与excel的顺序不同,如何解决全部的内容,包括:excel数据导入sql server 2008 导进去后顺序与excel的顺序不同,如何解决、使用C# 把Excel的数据导入SQL server 2008、SQL SERVER2008中使用“任务”->“导入数据”,导入EXCEL表中数据失败,显示数值型数据格式匹配不正确。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)