【发布时间】:2014-08-01 17:20:41
【问题描述】:
我正在尝试将 SQL Server 支持添加到我们产品之一的 Mono(在 Linux 上,而不是 Android)版本中。
我有一个在 Windows 上运行良好的代码库,但在 Mono 下,它不正常。我们使用的是 SQL 身份验证,而不是 NT。
我能够取回一个表名列表,所以我知道它正在与数据库“对话”,但是当我尝试从表中查询行时,我得到了:
[错误] 致命的未处理异常:System.Exception:未知数据包类型 129
在 Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacketHeader () [0x00000] 中:0
在 Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacket () [0x00000] in :0
在 Mono.Data.Tds.Protocol.TdsComm.Peek () [0x00000] in :0
在 Mono.Data.Tds.Protocol.Tds.NextResult () [0x00000] in :0
在 System.Data.SqlClient.SqlCommand.ExecuteScalar () [0x00000] in :0
在 OpenNETCF.ORM.SQLStoreBase`1[OpenNETCF.ORM.SqlEntityInfo].ExecuteScalar (System.String sql) [0x00000] in :0
在 OpenNETCF.ORM.SqlServerDataStore.get_ServerVersion () [0x00000] 中:0
在 OpenNETCF.ORM.SqlServerDataStore.Fetch (System.String entityName, Int32 fetchCount, Int32 firstRowOffset, System.String sortField, FieldSearchOrder sortOrder, OpenNETCF.ORM.FilterCondition filter, Boolean fillReferences) [0x00000] in :0
在 SolutionFamily.Storage.DataEntityProvider.GetEntityInstances (System.String entityName, Int32 skipNumber, Int32 retrieveNumber) [0x00000] in :0
{更多调用堆栈省略}
所以看起来 Mono 中的 TDS 版本很旧,也许吧? Packet type 129 looks like it’s a “result” packet from version 7.0 on,所以据我所知,这并不是什么新鲜事。它从 SQL Server 7 开始就一直在使用,而它本身离“最近”还很远。
所以我想我的问题是:
- 从 Mono 应用程序连接到 SQL Server 2012 数据库是否受支持?
- 有没有人成功连接到“现代”版本的 SQL Server?
- 是否有更新版本的 TDS on System.Data.* 可用以增加支持?
- 关于如何继续(除了调试 Mono 并尝试自己实现这些东西)有什么想法吗?
【问题讨论】:
-
你有没有得出这个结论? Mono 是否支持 Sql Server 2012?
-
我的结论在下面接受的答案中概述 - 不要尝试致电
SELECT SERVERPROPERTY。从那时起它可能已经改变了,但我只是围绕它工作了代码,再也不用回去了。
标签: c# mono sql-server-2012