我已經創建了一個基本的.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