在ASP.NET中将SQL查询的结果写入Web Forms Response的简单方法是什么?
本文关键字:Forms Web Response 简单 是什么 方法 NET ASP 中将 SQL 结果 | 更新日期: 2023-09-27 17:50:22
我需要一个简单的方法来写一个SQL查询(SQLDataReader
通过sqlcommand.ExecuteReader()
)的结果到一个Web表单响应(即,一些字符串写到Response.Write(string)
),并在一种格式,易于在PHP中阅读。我正在考虑创建一个JSON对象,将其转换为字符串,并将该JSON字符串写入响应,但我找不到在Web Forms中做到这一点的简单方法。
我想这样写:
{ "tableColumn1": "value",
"tableColumn2": "value"}
但我不确定是否有一个简单的方法来做到这一点使用SqlDataReader
最终目标是使。net环境中经常变化的表数据易于在Linux环境中使用PHP读取。
public class myClass
{
public int myColumn { get; set; }
public string myColumn2 { get; set; }
}
public string MySqlMethod()
{
using (var conn = new SqlConnection("connectionString"))
{
var query = "SELECT * FROM SomeTable;";
var cmd = new SqlCommand(query, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
var listToConvert = new List<myClass>();
while (dr.Read())
{
var toAdd = new myClass();
toAdd.myColumn = dr.GetInt32(dr.GetOrdinal("myColumn"));
toAdd.myColumn2 = dr.GetString(dr.GetOrdinal("myColumn2"));
listToConvert.Add(toAdd);
}
return GenerateJson(listToConvert);
}
}
public static string GenerateJson<T>(List<T> obj)
{
var returnString = "[";
var listCounter = 0;
foreach (var item in obj)
{
var counter = 0;
var props = item.GetType().GetProperties();
returnString += "{";
foreach (var prop in props)
{
returnString += "'"" + prop.Name + "'":" + "'"" + prop.GetValue(item, null) + "'"";
counter++;
if (counter != props.Count())
returnString += ",";
}
returnString += "}";
listCounter++;
if (listCounter != obj.Count())
returnString += ",";
}
returnString += "]";
return returnString;
}
这在WebForms中完全是"可行的",这并不特定于MVC。这方面的维护非常简单,只需要对自定义类做一个小的更改,并在表更改时添加一些新的dr.GetWhatever。
如果你想要一个更动态的解决方案,我会看看实体框架,如果可能的话。然后,您可以创建部分类来补充EF自动生成的类。此时的维护几乎为零。
在Page_Load事件中,您需要清除响应,然后手动处理它,使用以下代码:
string response = string.Format("[ '"tableColumn1'": '"{0}'",'"tableColumn2'":'"{2}'"]", value1, value2).Replace('[', '{').Replace(']', '}');
Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.Write(response );
Response.End();