我目前正在尝试将应用程序从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)
的列:)
有没有人对调试的下一步有什么建议?一种选择是使用SQL Server CE类重写我的所有代码,但这需要很长时间才能成为最后的手段。
答案 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)