Asp.net发布到IIS导入效能不能用,VS2010运行可以导入
Asp.net发布到IIS导入功能不能用,VS2010运行可以导入
string sheetname = "Sheet1";
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter oada = new OleDbDataAdapter("select *,'"+flStr+"' as flbh from [" + sheetname + "$]", strConn);
DataSet ds = new DataSet();
oada.Fill(ds);
if (ds != null && ds.Tables.Count > 0)
{
//判断分类编号是否存在
DataTable dt = ds.Tables[0];
bool isok = new DAL().ShangPinExcelInsert(dt);
}
public bool ShangPinExcelInsert(DataTable dt)
{
int count = dt.Rows.Count;
string tableName = "sp";
int copyTimeout = 600;
bool flag = false;
SqlConnection cn = new Conn().getConn();
cn.Open();
SqlTransaction sqltran = cn.BeginTransaction();
try
{
using (SqlBulkCopy sbc = new SqlBulkCopy(cn, SqlBulkCopyOptions.Default, sqltran))
{
//服务器上目标表的名称
sbc.DestinationTableName = tableName;
sbc.BatchSize = 800;
sbc.BulkCopyTimeout = copyTimeout;
//列映射定义数据源中的列和目标表中的列之间的关系
sbc.ColumnMappings.Add("商品编号", "spbh");
sbc.ColumnMappings.Add("商品名称", "spmc");
sbc.ColumnMappings.Add("规格", "ggxh");
sbc.ColumnMappings.Add("产地名称", "spcd");
sbc.ColumnMappings.Add("尺寸", "cc");
sbc.ColumnMappings.Add("商品重量", "spzl");
sbc.ColumnMappings.Add("商品体积", "sptj");
sbc.ColumnMappings.Add("适用车型", "sycx");
sbc.ColumnMappings.Add("商品单位", "spdw");
sbc.ColumnMappings.Add("销售价1", "lsbj");
sbc.ColumnMappings.Add("销售价2", "pfbj");
sbc.ColumnMappings.Add("销售价3", "zybj");
sbc.ColumnMappings.Add("销售限价", "bybj");
sbc.ColumnMappings.Add("最新进价", "zxjj");
sbc.ColumnMappings.Add("平均进价", "jqpjj");
sbc.ColumnMappings.Add("网价", "wj");
sbc.ColumnMappings.Add("最低库存", "zdkcl");
sbc.ColumnMappings.Add("最高库存", "zgkcl");
sbc.ColumnMappings.Add("页码", "spym");
sbc.ColumnMappings.Add("简码", "spjm");
sbc.ColumnMappings.Add("对应编号", "dybh");
sbc.ColumnMappings.Add("外文名称1", "wwmc");
sbc.ColumnMappings.Add("外文名称2", "wwmc2");
sbc.ColumnMappings.Add("备注", "spbz");
sbc.ColumnMappings.Add("是否停用", "ty");
sbc.ColumnMappings.Add("flbh", "flbh");
sbc.WriteToServer(dt);
sqltran.Commit();
flag = true;
//判断库存表里没有的,添加
flag = execProc("JCSJ_SP_InsertKC", "");
}
}
catch (Exception)
{
flag = false;
sqltran.Rollback();
}
finally
{
cn.Close();
sqltran.Dispose();
}
return flag;
}[u][/u]
------解决思路----------------------
是不是出异常,但是被你吃掉了
catch (Exception)
{
flag = false;
sqltran.Rollback();
}
你在catch里只是回滚,因此你不知道异常的信息。
你可以在这里写log,或者加入throw; 再把异常抛出来。
------解决思路----------------------
可以用Server.MapPath 将虚拟路径 映射到物理路径。
还要注意权限。
参考:
https://msdn.microsoft.com/en-us/library/ms524632%28v=vs.90%29.aspx
------解决思路----------------------
给你个例子,好好看看,顺便,不要用office.excel.dll,改用NPOI吧,那个问题太多
你的是网站,需要先将本地文件上传(获得文件流,保存),然后网站再打开服务器上的文件,读取,导入数据
服务器不要使用客户端的路径
例子
string sheetname = "Sheet1";
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter oada = new OleDbDataAdapter("select *,'"+flStr+"' as flbh from [" + sheetname + "$]", strConn);
DataSet ds = new DataSet();
oada.Fill(ds);
if (ds != null && ds.Tables.Count > 0)
{
//判断分类编号是否存在
DataTable dt = ds.Tables[0];
bool isok = new DAL().ShangPinExcelInsert(dt);
}
public bool ShangPinExcelInsert(DataTable dt)
{
int count = dt.Rows.Count;
string tableName = "sp";
int copyTimeout = 600;
bool flag = false;
SqlConnection cn = new Conn().getConn();
cn.Open();
SqlTransaction sqltran = cn.BeginTransaction();
try
{
using (SqlBulkCopy sbc = new SqlBulkCopy(cn, SqlBulkCopyOptions.Default, sqltran))
{
//服务器上目标表的名称
sbc.DestinationTableName = tableName;
sbc.BatchSize = 800;
sbc.BulkCopyTimeout = copyTimeout;
//列映射定义数据源中的列和目标表中的列之间的关系
sbc.ColumnMappings.Add("商品编号", "spbh");
sbc.ColumnMappings.Add("商品名称", "spmc");
sbc.ColumnMappings.Add("规格", "ggxh");
sbc.ColumnMappings.Add("产地名称", "spcd");
sbc.ColumnMappings.Add("尺寸", "cc");
sbc.ColumnMappings.Add("商品重量", "spzl");
sbc.ColumnMappings.Add("商品体积", "sptj");
sbc.ColumnMappings.Add("适用车型", "sycx");
sbc.ColumnMappings.Add("商品单位", "spdw");
sbc.ColumnMappings.Add("销售价1", "lsbj");
sbc.ColumnMappings.Add("销售价2", "pfbj");
sbc.ColumnMappings.Add("销售价3", "zybj");
sbc.ColumnMappings.Add("销售限价", "bybj");
sbc.ColumnMappings.Add("最新进价", "zxjj");
sbc.ColumnMappings.Add("平均进价", "jqpjj");
sbc.ColumnMappings.Add("网价", "wj");
sbc.ColumnMappings.Add("最低库存", "zdkcl");
sbc.ColumnMappings.Add("最高库存", "zgkcl");
sbc.ColumnMappings.Add("页码", "spym");
sbc.ColumnMappings.Add("简码", "spjm");
sbc.ColumnMappings.Add("对应编号", "dybh");
sbc.ColumnMappings.Add("外文名称1", "wwmc");
sbc.ColumnMappings.Add("外文名称2", "wwmc2");
sbc.ColumnMappings.Add("备注", "spbz");
sbc.ColumnMappings.Add("是否停用", "ty");
sbc.ColumnMappings.Add("flbh", "flbh");
sbc.WriteToServer(dt);
sqltran.Commit();
flag = true;
//判断库存表里没有的,添加
flag = execProc("JCSJ_SP_InsertKC", "");
}
}
catch (Exception)
{
flag = false;
sqltran.Rollback();
}
finally
{
cn.Close();
sqltran.Dispose();
}
return flag;
}[u][/u]
------解决思路----------------------
是不是出异常,但是被你吃掉了
catch (Exception)
{
flag = false;
sqltran.Rollback();
}
你在catch里只是回滚,因此你不知道异常的信息。
你可以在这里写log,或者加入throw; 再把异常抛出来。
------解决思路----------------------
可以用Server.MapPath 将虚拟路径 映射到物理路径。
还要注意权限。
参考:
https://msdn.microsoft.com/en-us/library/ms524632%28v=vs.90%29.aspx
------解决思路----------------------
给你个例子,好好看看,顺便,不要用office.excel.dll,改用NPOI吧,那个问题太多
你的是网站,需要先将本地文件上传(获得文件流,保存),然后网站再打开服务器上的文件,读取,导入数据
服务器不要使用客户端的路径
例子