在ASP.NET中将SQL查询的结果写入Web Forms Response的简单方法是什么?



我需要一个简单的方法来写一个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();

最新更新