2016-10-07 56 views
1

我正在使用.net core 1.0.1。我想從Sql Server表執行一個存儲過程。我可以連接到數據庫正確,現在我有以下代碼:net core - 將閱讀器轉換爲json

var con = _context.Database.GetDbConnection(); 
var cmd = con.CreateCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = "procedures.sp_Users"; 
cmd.Parameters.Add(new SqlParameter("@Command", SqlDbType.VarChar) { Value = "Login" }); 
cmd.Parameters.Add(new SqlParameter("@user", SqlDbType.VarChar) { Value = "admin" }); 
cmd.Parameters.Add(new SqlParameter("@pass", SqlDbType.VarChar) { Value = "admin" }); 

var reader = cmd.ExecuteReader(); 

所以我想這個reader轉換成JSON字符串在控制器返回它。

我該如何實現它?

我讀了我不能使用DataTableDataSet,因爲它們不是跨平臺的。

+1

你可以使用'DataReaderConverter'從[JSON.net直接從OleDbConnection的序列化(https://stackoverflow.com/問題/ 33835729/JSON-網連載,直接從 - 的OleDbConnection)。該轉換器可以直接從任何'IDataReader'串行化。 – dbc

回答

0

解決了以下內容:

var con = _context.Database.GetDbConnection(); 
var cmd = con.CreateCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = "procedures.sp_Users"; 
cmd.Parameters.Add(new SqlParameter("@Command", SqlDbType.VarChar) { Value = "Login" }); 
cmd.Parameters.Add(new SqlParameter("@user", SqlDbType.VarChar) { Value = "admin" }); 
cmd.Parameters.Add(new SqlParameter("@pass", SqlDbType.VarChar) { Value = "admin" }); 

var retObject = new List<dynamic>(); 
con.Open(); 
using (var dataReader = cmd.ExecuteReader()) 
{ 
    while (dataReader.Read()) 
    { 
     var dataRow = new ExpandoObject() as IDictionary<string, object>; 
     for (var iFiled = 0; iFiled < dataReader.FieldCount; iFiled++) 
      dataRow.Add(
       dataReader.GetName(iFiled), 
       dataReader.IsDBNull(iFiled) ? null : dataReader[iFiled] // use null instead of {} 
      ); 

     retObject.Add((ExpandoObject)dataRow); 
    } 
} 
return retObject; 

如建議採取以下link

相關問題