最近需要做从excel导入数据到sql server,由于自己也是一个新手,所以在网上找了一些资料,参考找做了一下,结果出现了问题,所以还是来问一下大家,希望帮助解决,先谢谢了!
情况如下,这是参考网上提供的一段代码:
//新表插入,MySqlOperator是我自己写的一个数据库操作类,就是封装了一些常用的操作,应该是没有问题的
MySqlOperator mySql = new MySqlOperator();mySql.StrSql = "SELECT * into Table1 FROM OpenRowSet('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=" + Server.MapPath("/SW/Data/") + "gtds.xls',个体定税$)";mySql.ExeSql();//然后:向已有表插入数据
mySql.StrSql = "INSERT INTO Table1 " +
" SELECT * FROM OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0; " +
" HDR=NO;IMEX=1;database=" + Server.MapPath("/SW/Data/")+ "gtds.xls;','select * from [个体定税$]')";
mySql.ExeSql();
错误如下:将数据类型 nvarchar 转换为 float 时出错。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: 将数据类型 nvarchar 转换为 float 时出错。我看了一下数据库,发现数据好像都写进去了,不过正如错误信息所说的,excel文件中单元格全为数字的字符串在数据库中也是数字型的了(都带小数点了),本来这些是字符串的,比如说一个编码4006358(excel中)数据库中则是4006358.0了,这个问题如何解决!另外,我现在关键的是需要导入数据到我的数据库表中,由于这个表的数据字段是单位提供的,原则上是不让修改的,因此我将上面的修改为向我的表格中导数据(将table1改为我的数据表名)
//然后:向已有表插入数据
mySql.StrSql = "INSERT INTO mytable " +
" SELECT * FROM OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0; " +
" HDR=NO;IMEX=1;database=" + Server.MapPath("/SW/Data/")+ "gtds.xls;','select * from [个体定税$]')";结果提示如下错误:
不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r7')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r12')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r15')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r22')。请使用 CONVERT 函数来运行此查询。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: 不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r7')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r12')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r15')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r22')。请使用 CONVERT 函数来运行此查询。按照这个提示,我是不是要在select后面将所有列名写出来,然后再对应的列上面使用CONVERT函数阿?这样也太郁闷了吧……又没有什么解决办法啊?
情况如下,这是参考网上提供的一段代码:
//新表插入,MySqlOperator是我自己写的一个数据库操作类,就是封装了一些常用的操作,应该是没有问题的
MySqlOperator mySql = new MySqlOperator();mySql.StrSql = "SELECT * into Table1 FROM OpenRowSet('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=" + Server.MapPath("/SW/Data/") + "gtds.xls',个体定税$)";mySql.ExeSql();//然后:向已有表插入数据
mySql.StrSql = "INSERT INTO Table1 " +
" SELECT * FROM OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0; " +
" HDR=NO;IMEX=1;database=" + Server.MapPath("/SW/Data/")+ "gtds.xls;','select * from [个体定税$]')";
mySql.ExeSql();
错误如下:将数据类型 nvarchar 转换为 float 时出错。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: 将数据类型 nvarchar 转换为 float 时出错。我看了一下数据库,发现数据好像都写进去了,不过正如错误信息所说的,excel文件中单元格全为数字的字符串在数据库中也是数字型的了(都带小数点了),本来这些是字符串的,比如说一个编码4006358(excel中)数据库中则是4006358.0了,这个问题如何解决!另外,我现在关键的是需要导入数据到我的数据库表中,由于这个表的数据字段是单位提供的,原则上是不让修改的,因此我将上面的修改为向我的表格中导数据(将table1改为我的数据表名)
//然后:向已有表插入数据
mySql.StrSql = "INSERT INTO mytable " +
" SELECT * FROM OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0; " +
" HDR=NO;IMEX=1;database=" + Server.MapPath("/SW/Data/")+ "gtds.xls;','select * from [个体定税$]')";结果提示如下错误:
不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r7')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r12')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r15')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r22')。请使用 CONVERT 函数来运行此查询。
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: 不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r7')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r12')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r15')。请使用 CONVERT 函数来运行此查询。不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r22')。请使用 CONVERT 函数来运行此查询。按照这个提示,我是不是要在select后面将所有列名写出来,然后再对应的列上面使用CONVERT函数阿?这样也太郁闷了吧……又没有什么解决办法啊?
解决方案 »
- 可以再catch里把错误的位置显示出来吗?
- 用什么方法实现类似于winform那样,单击button后,跳到后台的程序
- Mvc开发,aspx文件只能放在文件夹下面吗,还有能否可以禁用URL重写?
- 哈哈,一些asp.net的MVC的教材真是令人郁闷
- 新手问个简单问题
- 怎样在sql server 2000的存储过程中调用多个存储过程?
- GridView点编辑时如何绑定dropdownlist的值
- 求一个html代码,关于鼠标事件的?!!!!
- 请教大家 javascript问题
- 如何得到这样的格式:2005-01-01
- 求几篇关于关于asp.net,sql server,b/s模式的文档,写毕业设计用~~~~~~~~
- 需要让用户编辑Excel表头,保存成xml,再把这个xml和数据库里面的数据导出到Excel,有什么建议?
不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r12')。请使用 CONVERT 函数来运行此查询。
不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r15')。请使用 CONVERT 函数来运行此查询。
不允许从数据类型 nvarchar 到数据类型 money 的隐性转换(表 'sw.dbo.sy_dszl_gtsd',列 'r22')。请使用 CONVERT 函数来运行此查询。]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, TdsParserState state) +201
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, TdsParserState state) +68
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +1048
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2607
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result) +375
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +125
my.sql.MySqlOperator.ExeSql() +61
ExcelToDB_aspx.Page_Load(Object Src, EventArgs E) in e:\Visual Studio\WebSites\SW\Test\ExcelToDB.aspx.cs:49
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +36
System.Web.UI.Control.OnLoad(EventArgs e) +102
System.Web.UI.Control.LoadRecursive() +45
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +952