Sco*_*lby 2 c# asp.net sqlcommand
这个foreach循环在测试时运行良好,只返回5行数据,但我很清楚它是如何编写的,有没有更好的方法,可能使用stringbuilder来更有效地重写它?
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstring"].ConnectionString);
SqlCommand comm = new SqlCommand("SELECT Title, StartDate FROM tblEvents JOIN eo_UserEventWatch ON eo_UserEventWatch.EventID=tblEvents.ID WHERE eo_UserEventWatch.UserID = @GUID ;", conn);
comm.Parameters.AddWithValue("GUID", userID);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(comm);
DataTable dt = new DataTable();
da.Fill(dt);
string result ="{ \"event\" :[";
foreach (DataRow dr in dt.Rows)
{
result += "{\"title\" : \"" + dr[0].ToString() + "\" , \"start\" : \"" + dr[1].ToString() +"\"} ,";
}
result = result.TrimEnd(',');
result += "] }";
return result;
Run Code Online (Sandbox Code Playgroud)
是的,使用它会更有效StringBuilder:
StringBuilder builder = new StringBuilder("{ \"event\" :[");
foreach (DataRow row in dt.Rows)
{
// Alternatively, use AppendFormat
builder.Append("{\"title\" :\"");
.Append(row[0])
.Append("\", \"start\" : \"")
.Append(row[1])
.Append("\"} ,");
}
if (builder[builder.Length - 1] == ',')
{
builder.Length -= 1;
}
builder.Append("] }");
string result = builder.ToString();
Run Code Online (Sandbox Code Playgroud)
但是,它仍然不是很好的代码 - 因为你已经拥有了所有可怕的文字JSON.我建议使用Json.NET或其他JSON库.你可以在那时使用LINQ,例如
var result = new { event = dt.AsEnumerable()
.Select(r => new {
title = r.Field<string>(0),
start = r.Field<DateTime>(1))
.ToArray() };
// Or whatever, depending on the library you use
var json = JsonSerializer.ToJson(result);
Run Code Online (Sandbox Code Playgroud)
除此之外,现在您不必担心起始值的格式,或者标题是否包含引号等.
(编辑:如上所述,你应该绝对有usingSQL连接的声明等.这不在问题的主要部分,这就是为什么我在这里没有提到它.)
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |