C# 从SQL server数据库创建JSON结果

C# 从SQL server数据库创建JSON结果,c#,javascript,sql,json,razor,C#,Javascript,Sql,Json,Razor,我有一个SQL server,布局如下 Table ( id int title varchar(40), start Date(), end Date(), allDay bool, username varchar(40) ); 我从中获得了以下代码,用于从我希望使用的数据创建JSON对象,但是他的数据存储方式不同。如何创建从数据库中提取的相同对象 我猜我需要将该

我有一个SQL server,布局如下

Table (    id int
           title varchar(40),
           start Date(),
           end Date(),
           allDay bool,
           username varchar(40)
      );
我从中获得了以下代码,用于从我希望使用的数据创建JSON对象,但是他的数据存储方式不同。如何创建从数据库中提取的相同对象

我猜我需要将该文件设置为.cshtml文件而不是.js文件,并使用以下内容:

@{
    var db = Database.Open("events"); 
    var selectQueryString = "SELECT * FROM events";
}

 @foreach(var row in db.Query(selectQueryString)){ }
但是我如何调整此代码以生成相同的JSON对象

以下是博客中的相关代码,我的尝试如下:

public JsonResult GetEvents(double start, double end)
{
    var userName = Session["UserName"] as string;
    if(string.IsNullOrEmpty(userName))
    {
        return null;
    }

    var fromDate = ConvertFromUnixTimestamp(start);
    var toDate = ConvertFromUnixTimestamp(end);

    var rep = Resolver.Resolve<IEventRepository>();
    var events = rep.ListEventsForUser(userName,fromDate,toDate);

    var eventList = from e in events
                    select new {
                                id = e.Id,
                                title = e.Title,
                                start = e.FromDate.ToString("s"),
                                end = e.ToDate.ToString("s"),
                                allDay = false
                            }; 

    var rows = eventList.ToArray();
    return Json(rows,JsonRequestBehavior.AllowGet);           
}

WebMatrix网页中没有控制器和操作。您需要编写一个单独的.cshtml页面来查询数据库并向响应提供JSON:

@{
    var db = Database.Open("events");
    var result = db.Query("SELECT * FROM events");
    var data = result.Select(x => new 
    {
        id = x.id,
        title = x.title,
        start = x.start.ToString("s"),
        end = x.end.ToString("s"),
        allDay = false            
    }).ToArray();

    Json.Write(data, Response.Output);
    Response.ContentType = "application/json";
}
然后在另一个要显示日历的页面中,您可以对其进行配置:

$(document).ready(function() {             
    $('#calendar').fullCalendar({ 
        theme: true, 
        header: { 
            left: '', 
            center: '', 
            right: '' 
        }, 
        defaultView: 'agendaDay', 
        editable: false, 
        events: '/events.cshtml' 
    }); 
});
更新:以下是如何使用参数化查询的示例:

@{

    var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    var fromDate = origin.AddSeconds(int.Parse(Request["start"]));
    var toDate = origin.AddSeconds(int.Parse(Request["end"]));
    var db = Database.Open("events");
    var sql = "SELECT * FROM events WHERE start >= @0 AND end <= @1";
    var result = db.Query(sql, fromDate, toDate);
    var data = result.Select(x => new 
    {
        id = x.id,
        title = x.title,
        start = x.start.ToString("s"),
        end = x.end.ToString("s"),
        allDay = false            
    }).ToArray();

    Json.Write(data, Response.Output);
    Response.ContentType = "application/json";
}
现在您可以像这样查询页面:/events.cshtml?start=5&end=10


我希望此查询的结果为JSON

有什么问题吗?在这种情况下我将如何使用JavascriptSerializer?感谢您的回复。我已经尝试将您的代码集成到我的代码中,但它似乎不起作用,不幸的是,没有为日历生成任何事件。我有两个理论-第一个是开始/结束时间存储方式不同,需要更改,第二个是在第一个.cshtml文件中,包含到数据库的连接,它似乎没有返回任何内容?你有什么想法,因为我一直在努力,因为你的反应没有用!非常感谢您的回复:另外,在我上面的代码中,当前视图的开始和结束时间作为参数提供,但在您的C函数中,这些数据似乎根本没有被使用?@SimonKiely,在您更新的答案中,您似乎使用了与C语法不太相似的东西。将SQL字符串与点连接起来。另外,您似乎正在使用未定义的变量调用ConvertFromUnixTimestamp函数:start和end。如果您想从请求中读取此信息,您可以使用request[start]和request[end]。不过,我建议您首先在不使用其他过滤参数的情况下实现这一点。您还将代码包装在HTML文件中,并且没有返回JSON数据。还可以使用FireBug查看脚本是否发送了正确的JSON。@SimonKiely,有关如何正确使用网页参数化查询的示例,请参阅我的更新答案。你也可以在你的代码中设置断点,然后试着调试它。是的,我完全同意你的观点,FireBug非常棒。如果要为特定用户呈现结果集,可以在SQL查询中使用username列来约束结果集。
@{

    var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    var fromDate = origin.AddSeconds(int.Parse(Request["start"]));
    var toDate = origin.AddSeconds(int.Parse(Request["end"]));
    var db = Database.Open("events");
    var sql = "SELECT * FROM events WHERE start >= @0 AND end <= @1";
    var result = db.Query(sql, fromDate, toDate);
    var data = result.Select(x => new 
    {
        id = x.id,
        title = x.title,
        start = x.start.ToString("s"),
        end = x.end.ToString("s"),
        allDay = false            
    }).ToArray();

    Json.Write(data, Response.Output);
    Response.ContentType = "application/json";
}
DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)

SELECT  @listCol = STUFF(( SELECT distinct  '], [' + [PSize]
                           FROM     Pattern
                         FOR
                           XML PATH('')
                         ), 1, 2, '') + ']'


SET @query = 'SELECT * FROM
      (SELECT PColour as Colour_Size_Matrix, PSize, PCode
            FROM Pattern
            ) src
PIVOT (Count(PCode) FOR PSize
IN (' + @listCol + ')) AS pvt'

EXECUTE ( @query )