OleDbDataAdapter内部错误:无效的行集访问器。状态= UNSUPPORTEDCONVERSION

时间:2016-02-15 22:18:07

标签: c# sql-server database sql-server-ce oledb

我目前正在尝试将应用程序从Microsoft Access数据库移动到SQL Server Compact Edition。我已经设法使用SSMA和SQL Toolbox转换数据库,但是我使用旧的c#代码进行查询时遇到了一些错误(如预期的那样)。到目前为止,我已经能够解决问题了,但我对这个问题感到有点难过:

  

OleDbDataAdapter内部错误:无效的行集访问器:Ordinal =#Status = UNSUPPORTEDCONVERSION

在浏览stackoverflow和谷歌后,我发现通常这是因为使用ntext列。我没有使用任何,但我在表的第18列使用NVARCHAR(MAX)列。显然是SQL Server 2012的这些are supported

我决定将列转换为nvarchar(255)以尝试使用此T-SQL查询进行修复:

UPDATE dbo.Table1 SET Col1 = LEFT(Col1, 255)
GO
ALTER TABLE dbo.Table ALTER COLUMN Col1 NVARCHAR(255)

这仍然没有解决错误,因为我不确定无论如何我使用以下查询进行仔细检查:

SELECT COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
ORDINAL_POSITION
FROM GPLADB.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table1'
ORDER BY ORDINAL_POSITION

这产生了以下结果(BTW'配置文件'是我从nvarchar(MAX)更改为nvarchar(255)的列:)

enter image description here

有没有人对调试的下一步有什么建议?一种选择是使用SQL Server CE类重写我的所有代码,但这需要很长时间才能成为最后的手段。

1 个答案:

答案 0 :(得分:1)

我的错误是在进行更改后没有将我的SQL Server数据库转换为SQL CE。但是,似乎OleDb不支持nvarchar(max),所以我的解决方案是使用以下代码使用nvarchar(max)查找所有列,因为这些字段的长度为-1:

SELECT 
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
FROM [DatabaseName].COLUMNS
WHERE CHARACTER_MAXIMUM_LENGTH = '-1'

然后通过为每个找到的字段创建一个包含以下代码的脚本:

UPDATE dbo.Table1 SET Col1 = LEFT(Col1, 4000)
GO
ALTER TABLE dbo.Table ALTER COLUMN Col1 NVARCHAR(4000)