我已经创建了一个基本的.Net Core控制台测试应用程序,以连接到本地Sql Server实例并检索数据。面向.NET 4.6.1,但不针对对.NET核心时,当相同的代码工作正常:在CoreFx上使用System.Data.SqlClient时UDT不支持的令牌问题
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Dynamic;
using System.Linq;
using System.Text;
namespace SqlServerTests
{
public class Program
{
public static void Main(string[] args)
{
try
{
StringBuilder statement = new StringBuilder("SELECT * FROM calendars as i WHERE i.Id='[id]");
SqlConnection sqlConnection = new SqlConnection("[Connection works fine]");
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand(statement.ToString(), sqlConnection);
SqlDataReader sqlReader = sqlCommand.ExecuteReader();
if (!sqlReader.HasRows)
Console.WriteLine("No data found"); ;
List<dynamic> dataSet = new List<dynamic>();
if (sqlReader.HasRows)
while (sqlReader.Read())
{
dynamic dataObject = new ExpandoObject();
var data = dataObject as IDictionary<string, object>;
for (int i = 0; i < sqlReader.FieldCount; i++)
data[sqlReader.GetName(i)] = !sqlReader.IsDBNull(i) ? sqlReader.GetValue(i) : null;
dataSet.Add(data);
}
Console.WriteLine(dataSet.FirstOrDefault());
sqlConnection.Close();
}
catch(Exception exception)
{
//Exception code omitted
}
}
}
}
连接正常(另一个应用程序使用相同的连接来保存数据),并运行SQL Server Profiler中时查询按预期执行(数据也被检索粘贴查询到SQL Server管理Studio时如预期),但在控制台应用程序,我收到以下消息调用的ExecuteReader时:
服务器正在尝试使用某项功能这不是 在此平台上受支持。收到不受支持的令牌“Udt”,而 从服务器读取数据。 在System.Data.SqlClient.TdsParser.TryCommonProcessMetaData(TdsParserStateObject stateObj,_SqlMetaData COL)处 System.Data.SqlClient的 System.Data.SqlClient.TdsParser.TryProcessMetaData(的Int32 cColumns, TdsParserStateObject stateObj,_SqlMetaDataSet &元数据)。 TdsParser.TryRun(runBehavior runBehavior, 的SqlCommand cmdHandler,SqlDataReader的数据流, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()在 System.Data.SqlClient.SqlDataReader.get_MetaData ()在 System.Data.SqlClient。 SqlCommand.FinishExecuteReader(SqlDataReader的DS, RunBehavior runBehavior,字符串resetOptionsString)在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔returnStream,布尔 异步,的Int32超时,任务&任务,布尔asyncWrite, SqlDataReader的 DS)在 System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior 行为,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader()在 SqlServerTests.Program.Main(字串[] args)在...
我假设我在.Net核心应用程序中使用此代码时错过了某些内容,但我无法找到。
任何帮助将不胜感激,
约翰
嗨咸,谢谢你的回复,你对UDT是正确的。该表的地理数据类型为列,根据您的建议,我通过将其转换为varchar(CONVERT(varchar(100),[Location])并将查询结果加载为预期来选择此选项。 –
我也卡住了在同样的问题中,你能否详细说明你的答案或者可能是代码片段 – Janak
我想通了。谢谢:) – Janak