【发布时间】:2021-04-09 17:16:02
【问题描述】:
我有以下数据库类,它使用 ADO.NET 连接到没有任何模型的 SQL 数据库。我使用 GetData 方法返回一个序列化的 json 字符串,然后在我的控制器中的 ActionResult 获取请求中转换该字符串,如下所示。问题是我首先从 ADO.NET 查询返回一个 DataTable 对象,然后使用第三方 nuget 包 Newtonsoft 将其序列化为字符串,该包在我的控制器中转换为 json/应用程序类型。有没有办法用更少的步骤或第三方插件来实现这些结果?
当对数据库使用模型方法(例如实体框架)时,我能够使用 Ok() 方法将我的 EF 查询转换为 JSON 格式。这非常简单,但我讨厌保留我永远不会使用的模型的想法,所以我切换到 ADO.NET。我仍在学习 ADO.NET 和 ASP.NET Core,因此感谢您提供任何帮助。
数据库类
public String GetData(String connectionString, string str, params IDataParameter[] sqlParams)
{
int rows = -1;
DataTable objResult = new DataTable();
try
{
SqlDataReader myReader;
using (SqlConnection myCon = new SqlConnection(connectionString))
{
myCon.Open();
using (SqlCommand myCommand = new SqlCommand(str, myCon))
{
if (sqlParams != null)
{
foreach (IDataParameter para in sqlParams)
{
myCommand.Parameters.Add(para);
}
}
myReader = myCommand.ExecuteReader();
objResult.Load(myReader);
myReader.Close();
myCon.Close();
}
}
}
catch (Exception ex)
{
}
return JsonConvert.SerializeObject(objResult);
}
控制器:
public ActionResult DatatableLoad()
{
//Since ADO.NET returns a datatable we serialize it first in GetData()
//We have parameters here just in case we want to use them
string query = "select * from dbo.UserAccountsTbl WHERE USERNAME=@UserName;";
var parameters = new IDataParameter[]
{
new SqlParameter("@UserName", "SB")
};
String jsonResult = db.GetData(connectionString, query, parameters);
return Content(jsonResult, "application/json");
}
【问题讨论】:
标签: asp.net-web-api asp.net-core-mvc asp.net-core-3.1