public DataSet ExecleToDataSet(string filenameurl, string table)
{
DataSet ds = new DataSet();
try
{
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
odda.Fill(ds, table);
}
catch (Exception)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('Excel文件数据有误!');</script>");
}
return ds;
}
如上,读完excel文件后,insert数据库,身份证一列变成了科学计数法,需用什么方法可在不改变excel文件的前提下,正确导入证件信息呢。
30 个解决方案
#1
导出时前面加个单引号
#2
不是导出,是从excel文件向数据库导入。
#3
数据库存储的类型是什么
#4
oracle数据库
#5
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls=System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls" ) //检查格式是否为.xls
{
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回
}
//string filename = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName;
string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExecleDs(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
}
else
{
for (int i = 0; i < dr.Length; i++) //
{
string CITY_SF = dr[i]["省分"].ToString();
string CITY_DS = dr[i]["地市"].ToString();
string CITY_XQ = dr[i]["区县"].ToString();
string MENDAN = dr[i]["门店"].ToString();
string sqlcheck = "select count(*) from zxd_jh_ess_info where MENDAN='" + MENDAN+ "'"; //检查用户是否存在
//dataOperate.seleSQL(sqlcheck);
if (dataOperate.seleSQL(sqlcheck)<1)
{
string insertstr = "insert into zxd_jh_ess_info (CITY_SF,CITY_DS,CITY_XQ,MENDAN) values ('" + CITY_SF + "','" + CITY_DS + "','" + CITY_XQ + "','" + MENDAN + "')";
//dataOperate.execSQL(insertstr);
try
{
dataOperate.execSQL(insertstr);
}
catch (MembershipCreateUserException ex) //捕捉异常
{
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
}
}
else
{
Response.Write("<script>alert('内容重复!禁止导入');location='shujdr.aspx'</script></script> ");
continue;
}
}
Response.Write("<script>alert('Excle表导入成功!');location='shujdr.aspx'</script>");
}
// cn.Close();
}
}
这是导入的角本,这个字段中未体现证件号码一列,只是做个举例。
{
if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls=System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls" ) //检查格式是否为.xls
{
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回
}
//string filename = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName;
string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExecleDs(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
}
else
{
for (int i = 0; i < dr.Length; i++) //
{
string CITY_SF = dr[i]["省分"].ToString();
string CITY_DS = dr[i]["地市"].ToString();
string CITY_XQ = dr[i]["区县"].ToString();
string MENDAN = dr[i]["门店"].ToString();
string sqlcheck = "select count(*) from zxd_jh_ess_info where MENDAN='" + MENDAN+ "'"; //检查用户是否存在
//dataOperate.seleSQL(sqlcheck);
if (dataOperate.seleSQL(sqlcheck)<1)
{
string insertstr = "insert into zxd_jh_ess_info (CITY_SF,CITY_DS,CITY_XQ,MENDAN) values ('" + CITY_SF + "','" + CITY_DS + "','" + CITY_XQ + "','" + MENDAN + "')";
//dataOperate.execSQL(insertstr);
try
{
dataOperate.execSQL(insertstr);
}
catch (MembershipCreateUserException ex) //捕捉异常
{
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
}
}
else
{
Response.Write("<script>alert('内容重复!禁止导入');location='shujdr.aspx'</script></script> ");
continue;
}
}
Response.Write("<script>alert('Excle表导入成功!');location='shujdr.aspx'</script>");
}
// cn.Close();
}
}
这是导入的角本,这个字段中未体现证件号码一列,只是做个举例。
#6
我是说身份证有什么字段类型存储的
#7
数据库中用的是字符型,长度20位。
#8
excel表中证件类型列是“文本”型。
#9
用Convert或者cast转换一下
例如
select result = cast(9.0120616131000006E+23 as decimal(24,0))
#10
好的,我得明天试一下,现在没库,多谢了!
#11
在测试上用了一下,还是不行呀。DataRow[] dr = ds.Tables[0].Select();到这就报错,好象是没有读出字段来。
#12
各位高手帮我解决一下这个问题呀。
#13
ds.Tables[0].Select("");
是不是Select方法必须有参数,传空
是不是Select方法必须有参数,传空
#14
是不是与excel的数据格式有关呢,先设置下
以office2003为例,excel中选中身份证号列,选择菜单栏的“数据”》“分列”》“下一步”》“下一步”》
看到“列数据格式”》选择文本 》“完成”
以office2003为例,excel中选中身份证号列,选择菜单栏的“数据”》“分列”》“下一步”》“下一步”》
看到“列数据格式”》选择文本 》“完成”
#15
对,就是Dataset读时格式就错了,OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);,关健是怎样定议查询出字段的格式问题呀。select * from [Sheet1$]
#16
所以,你导入的时候应该仍然是字符串类型,不应该出现科学计数法
#17
应该再程序中检测如果身份证号里存在e则转换为数字字符串
#18
应该在程序中检测如果身份证号里存在e则转换为数字字符串
#19
在excel中是这样的数1812030160000940,导到数据库中就变成1.81203016000094E+15这样的了。还请各位详细说一下怎么转换。
#20
double.Parse("1.81203016000094E+15").ToString("0")
#21
那在哪改程序,可以实现这样的转换呢。OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
#22
在插入数据库的地方。把身份证号处理下。
#23
直接在数据库更新导入后的数据
例如
update a
set number=convert(varchar,(convert(bigint,number)))
例如
update a
set number=convert(varchar,(convert(bigint,number)))
#24
或者你先在excel里面设置身份证那一列的格式为文本格式 然后就不会出现这种情况了
#25
修改註冊表試試
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
TypeGuessRows=0
不讓excel猜測列類型
,默認為8行
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
TypeGuessRows=0
不讓excel猜測列類型
,默認為8行
#26
额,这个视乎是excel格式问题,你把excel里面的身份证号码格式设置成文本格式试试,或者你可以用sqlserver直接导入看一下就可以验证是不是excel本身格式的问题了
#27
这些不是,还得从Dataset读数据那想一下办法,将格式转换好,导入就正常了。OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
#28
变成1.81203016000094E+15这样的格式已经丢失数据精度了,你可以
123456789123456789 做测试,你看看原先你的excel里面不是科学计数法的样式吗
123456789123456789 做测试,你看看原先你的excel里面不是科学计数法的样式吗
#29
一语中的
你不能设成数字类型的
#30
decimal 转换。
如果Excel中的数据本身就是科学技术,你需要改变单元格的格式。
如果Excel中的数据本身就是科学技术,你需要改变单元格的格式。
#1
导出时前面加个单引号
#2
不是导出,是从excel文件向数据库导入。
#3
数据库存储的类型是什么
#4
oracle数据库
#5
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls=System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls" ) //检查格式是否为.xls
{
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回
}
//string filename = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName;
string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExecleDs(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
}
else
{
for (int i = 0; i < dr.Length; i++) //
{
string CITY_SF = dr[i]["省分"].ToString();
string CITY_DS = dr[i]["地市"].ToString();
string CITY_XQ = dr[i]["区县"].ToString();
string MENDAN = dr[i]["门店"].ToString();
string sqlcheck = "select count(*) from zxd_jh_ess_info where MENDAN='" + MENDAN+ "'"; //检查用户是否存在
//dataOperate.seleSQL(sqlcheck);
if (dataOperate.seleSQL(sqlcheck)<1)
{
string insertstr = "insert into zxd_jh_ess_info (CITY_SF,CITY_DS,CITY_XQ,MENDAN) values ('" + CITY_SF + "','" + CITY_DS + "','" + CITY_XQ + "','" + MENDAN + "')";
//dataOperate.execSQL(insertstr);
try
{
dataOperate.execSQL(insertstr);
}
catch (MembershipCreateUserException ex) //捕捉异常
{
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
}
}
else
{
Response.Write("<script>alert('内容重复!禁止导入');location='shujdr.aspx'</script></script> ");
continue;
}
}
Response.Write("<script>alert('Excle表导入成功!');location='shujdr.aspx'</script>");
}
// cn.Close();
}
}
这是导入的角本,这个字段中未体现证件号码一列,只是做个举例。
{
if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls=System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls" ) //检查格式是否为.xls
{
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回
}
//string filename = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName;
string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExecleDs(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
}
else
{
for (int i = 0; i < dr.Length; i++) //
{
string CITY_SF = dr[i]["省分"].ToString();
string CITY_DS = dr[i]["地市"].ToString();
string CITY_XQ = dr[i]["区县"].ToString();
string MENDAN = dr[i]["门店"].ToString();
string sqlcheck = "select count(*) from zxd_jh_ess_info where MENDAN='" + MENDAN+ "'"; //检查用户是否存在
//dataOperate.seleSQL(sqlcheck);
if (dataOperate.seleSQL(sqlcheck)<1)
{
string insertstr = "insert into zxd_jh_ess_info (CITY_SF,CITY_DS,CITY_XQ,MENDAN) values ('" + CITY_SF + "','" + CITY_DS + "','" + CITY_XQ + "','" + MENDAN + "')";
//dataOperate.execSQL(insertstr);
try
{
dataOperate.execSQL(insertstr);
}
catch (MembershipCreateUserException ex) //捕捉异常
{
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
}
}
else
{
Response.Write("<script>alert('内容重复!禁止导入');location='shujdr.aspx'</script></script> ");
continue;
}
}
Response.Write("<script>alert('Excle表导入成功!');location='shujdr.aspx'</script>");
}
// cn.Close();
}
}
这是导入的角本,这个字段中未体现证件号码一列,只是做个举例。
#6
我是说身份证有什么字段类型存储的
#7
数据库中用的是字符型,长度20位。
#8
excel表中证件类型列是“文本”型。
#9
用Convert或者cast转换一下
例如
select result = cast(9.0120616131000006E+23 as decimal(24,0))
#10
好的,我得明天试一下,现在没库,多谢了!
#11
在测试上用了一下,还是不行呀。DataRow[] dr = ds.Tables[0].Select();到这就报错,好象是没有读出字段来。
#12
各位高手帮我解决一下这个问题呀。
#13
ds.Tables[0].Select("");
是不是Select方法必须有参数,传空
是不是Select方法必须有参数,传空
#14
是不是与excel的数据格式有关呢,先设置下
以office2003为例,excel中选中身份证号列,选择菜单栏的“数据”》“分列”》“下一步”》“下一步”》
看到“列数据格式”》选择文本 》“完成”
以office2003为例,excel中选中身份证号列,选择菜单栏的“数据”》“分列”》“下一步”》“下一步”》
看到“列数据格式”》选择文本 》“完成”
#15
对,就是Dataset读时格式就错了,OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);,关健是怎样定议查询出字段的格式问题呀。select * from [Sheet1$]
#16
所以,你导入的时候应该仍然是字符串类型,不应该出现科学计数法
#17
应该再程序中检测如果身份证号里存在e则转换为数字字符串
#18
应该在程序中检测如果身份证号里存在e则转换为数字字符串
#19
在excel中是这样的数1812030160000940,导到数据库中就变成1.81203016000094E+15这样的了。还请各位详细说一下怎么转换。
#20
double.Parse("1.81203016000094E+15").ToString("0")
#21
那在哪改程序,可以实现这样的转换呢。OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
#22
在插入数据库的地方。把身份证号处理下。
#23
直接在数据库更新导入后的数据
例如
update a
set number=convert(varchar,(convert(bigint,number)))
例如
update a
set number=convert(varchar,(convert(bigint,number)))
#24
或者你先在excel里面设置身份证那一列的格式为文本格式 然后就不会出现这种情况了
#25
修改註冊表試試
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
TypeGuessRows=0
不讓excel猜測列類型
,默認為8行
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
TypeGuessRows=0
不讓excel猜測列類型
,默認為8行
#26
额,这个视乎是excel格式问题,你把excel里面的身份证号码格式设置成文本格式试试,或者你可以用sqlserver直接导入看一下就可以验证是不是excel本身格式的问题了
#27
这些不是,还得从Dataset读数据那想一下办法,将格式转换好,导入就正常了。OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn);
#28
变成1.81203016000094E+15这样的格式已经丢失数据精度了,你可以
123456789123456789 做测试,你看看原先你的excel里面不是科学计数法的样式吗
123456789123456789 做测试,你看看原先你的excel里面不是科学计数法的样式吗
#29
一语中的
你不能设成数字类型的
#30
decimal 转换。
如果Excel中的数据本身就是科学技术,你需要改变单元格的格式。
如果Excel中的数据本身就是科学技术,你需要改变单元格的格式。