以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 数据类型转换错误怎么解决?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=159293)

--  作者:wssylxb
--  发布时间:2020/12/21 13:18:00
--  [求助] 数据类型转换错误怎么解决?
      项目有个sql server2008 外部数据源的查询表”采购记录”,编写SQL语句后预览查询表,字段及顺序与云服务器的sql 2000中的目标表一样。
      在执行如下语句上报数据时出错:
DataTables("采购记录").Load \'加载新的查询表
\'开始快速导入
Dim tran As System.Data.SqlClient.SqlTransaction
try
    Dim conn As new System.Data.SqlClient.SqlConnection("server=连接字符串省略”) \'改为自己数据库的连接字符串
    conn.Open() \'打开链接
    tran = conn.BeginTransaction()
    Dim copy As new System.Data.SqlClient.SqlBulkCopy(conn, System.Data.SqlClient.SqlBulkCopyOptions.Default, tran)
    For Each dc As DataCol In DataTables("采购记录").datacols
        Dim mapping1 As new System.Data.SqlClient.SqlBulkCopyColumnMapping(dc.name, dc.name)
        Copy.ColumnMappings.Add(mapping1)
    Next
    
    copy.DestinationTableName=tb1name  \'指定服务器上目标表的名称
    
    copy.BatchSize = 1000
    copy.WriteToServer(DataTables("采购记录").basetable)
    tran.Commit()    \'提交事务
    Forms("采购发送").Open()
  catch ex As exception
    msgbox(ex.message)
    tran.Rollback()    \'返回False 执行失败!
End try

出错信息是:The given value of type string from  the deta source cannot be converted
to type  nvarchar of the  specified target column.

这个项目文件在多台电脑抓取多个数据库记录上传都没有问题,这个电脑安装运行时出现了问题,另外因为是2008数据库 运行了sqlncli_x64程序,但设置数据源的时候,发现还是没有SQL SERVER Native Client 10.0 这个驱动,但项目可以连上mssql2008数据库。
不知问题出在哪里?如何解决。多谢指导!

--  作者:有点蓝
--  发布时间:2020/12/21 13:36:00
--  
"采购记录"表的列和数据库里的表列肯定有不一致的类型。

设置数据源的时候,没有SQL SERVER Native Client 10.0 这个驱动是因为foxtable只能识别32位的程序,需要安装sqlncli_x86,不如如果可以连接,应该不用管这个的

--  作者:wssylxb
--  发布时间:2020/12/21 19:22:00
--  
错误提示的意思是string类型的给定值不能转换为指定目录列的nvarchar 类型,奇怪!string类型不就是sql server中的nvarchar类型吗?怎么会不能转换呢。
--  作者:有点蓝
--  发布时间:2020/12/21 20:18:00
--  
https://www.baidu.com/baidu?word=The%20given%20value%20of%20type%20string%20from%20%20the%20deta%20source%20cannot%20be%20converted
--  作者:wssylxb
--  发布时间:2020/12/22 21:11:00
--  
经过测试,目标数据表中的字段宽度小于填充的数据宽度,就会出现上面的错误提示,出现这个错误肯定是目标数据列的设定宽度小于原数据列宽造成的,而且一定是nvarchar类型的列问题,把目标表中nvarchar类型的列都改成255。数据正常填充了。现在的问题是为什么出现这个错误呢?在狐表中的查询表执行的sql语句,预览没有发现哪个列超宽,目标的表中,查看也没有列超过原来设定的宽带。
--  作者:有点蓝
--  发布时间:2020/12/22 21:13:00
--  
数据里有看不见的空格