2016-10-05 2 views
2

Если вы пытались использовать SQLClient в ядре asp.net, возможно, вы заметили отсутствие DataTables и DataSets, структур таблиц, используемых для ввода-вывода базы данных.Класс datatable в ядре asp.net

Для выходных данных у нас есть опция SqlDataReader. Но для входных данных я еще не нашел решение этой проблемы - например. если вы хотите передать таблицу в SP по параметру в фреймворке 461, мы используем 'SqlDbType = SqlDbType.Structured и DataTable class'. Любые идеи кто-нибудь?

библиотека, которую я использую: https://github.com/XML-Travelgate/xtg-data-sqlclient

+0

Не знаю, как это применяется к ядру .net, но [_ "System.Data.SqlClient поддерживает заполнение табличных параметров из объектов DataTable, DbDataReader или IEnumerable ." _] (https://msdn.microsoft.com/en-us/ library/bb675163 (v = vs.110) .aspx) - или вы можете создать собственный тип на сервер с 'CREATE TYPE dbo.xxx AS TABLE' – stuartd

+0

.net core не позволяет использовать эти типы объектов, и мне нужна альтернатива для ядра asp.net. Спасибо за Ваш ответ. –

+0

В соответствии с [соответствующей проблемой на .net-core] (https://github.com/dotnet/corefx/issues/8622) некоторые из них доступны _are_, посмотрите [этот комментарий] (https://github.com/dotnet/corefx/issues/8622 # issuecomment-223673368), а затем [этот] (https://github.com/dotnet/corefx/issues/8622#issuecomment-223980960) – stuartd

ответ

5

Решение:

 List<SqlDataRecord> datatable = new List<SqlDataRecord>(); 
     SqlMetaData[] sqlMetaData = new SqlMetaData[2]; 
     sqlMetaData[0] = new SqlMetaData("id", SqlDbType.Int); 
     sqlMetaData[1] = new SqlMetaData("name", SqlDbType.VarChar, 50); 
     SqlDataRecord row = new SqlDataRecord(sqlMetaData); 
     row.SetValues(new object[] { 1, "John" }); 
     datatable.Add(row); 
     row = new SqlDataRecord(sqlMetaData); 
     row.SetValues(new object[] { 2, "Peter" }); 
     datatable.Add(row); 

     var task = dbBase.ExecProcedureDataTableWithParamsAsync<object>("VIEWTABLE", new List<SqlParameter>() 
      { 
       new SqlParameter() 
       { 
        ParameterName = "@paramtable", 
        SqlDbType = SqlDbType.Structured, 
        Direction = ParameterDirection.Input, 
        Value = datatable 
       } 
      }); 
0

DataTable, DataSet и т.д. теперь могут быть реализованы с использованием .NET Сердечник 2.0 и Visual Studio 2017 Preview 15,3 +

Смежные вопросы