从 SQL Server 数据库创建 JSON 结果

     2023-04-12     165

关键词:

【中文标题】从 SQL Server 数据库创建 JSON 结果【英文标题】:Creating a JSON result from SQL server database 【发布时间】:2012-03-14 01:19:06 【问题描述】:

我有一个具有以下布局的 SQL 服务器

Table (    id int
           title varchar(40),
           start Date(),
           end Date(),
           allDay bool,
           username varchar(40)
      );

我从this blog 获得了以下代码,用于从我希望使用的数据创建一个 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);           

编辑:

我现在正在使用 GetEvents 命令的以下 .cshtml 代码,但它不起作用。有人有什么想法吗?

   @ 
        var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
        var fromDate = origin.AddSeconds((Request["start"]));
        var toDate = origin.AddSeconds(Request["end"]);

        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";
    

【问题讨论】:

JavacriptSerializer 有什么问题? 在这种情况下我将如何使用 JavascriptSerializer? 【参考方案1】:

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&amp;end=10

【讨论】:

感谢您的回复。我已尝试将您的代码集成到我的代码中,但不幸的是,它似乎不起作用 - 没有为日历生成任何事件。我有两个理论 - 第一个是开始/结束时间的存储方式不同并且需要更改,第二个是在第一个 .cshtml 文件中,包含与数据库的连接,它似乎没有返回任何事物?你有什么想法吗,因为自从你的回应无济于事以来,我一直在努力!非常感谢您的回复:) 另外,在我上面的代码中,当前视图的开始和结束时间是作为参数提供的,但是在你的C#函数中,这个数据似乎根本没有用到? @SimonKiely,在您更新的答案中,您似乎使用的东西看起来不太像 C# 语法。您将 SQL 字符串与点连接起来。此外,您似乎正在使用未定义的变量调用ConvertFromUnixTimestamp 函数:startend。如果您想从请求中读取此内容,您将使用 Request["start"]Request["end"]。我建议您首先在不使用其他过滤参数的情况下使其正常工作。此外,您将代码包装在 HTML 文件中,并且没有返回 JSON 数据。如果脚本发送正确的 JSON,还要查看 FireBug。 @SimonKiely,请参阅我更新的答案,了解如何正确使用网页的参数化查询的示例。您也可以在代码中放置断点并尝试对其进行调试。 是的,我完全同意你的观点,FireBug 很棒。如果您想为特定用户呈现它,您可以使用 SQL 查询中的用户名列来约束结果集。【参考方案2】:
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 )

我希望此查询的结果为 JSON

【讨论】:

SQL Server 2012 从 SQL 查询创建用户

...我有一个系统用户表,每个用户都需要一个系统用来访问数据库的自己的数据库用户(不是我的想法..)。系统有自己的登录。这给我们正在测试的SQLAlwaysOn分布式服务器设置带来了问题,因为用户不会在数据库之间同步。因此... 查看详情

解析 JSON 文件并将数据插入 SQL Server

...下JSON对象并尝试创建INSERT查询。创建数据并将数据插入数据库的最佳方法是什么?我正在使用JSON.NET来解析文件。我很感激任何建议。JsonTextReaderreader=newJsonTextReader(newSt 查看详情

从 Sql Server 数据库项目创建通用更新/安装脚本

】从SqlServer数据库项目创建通用更新/安装脚本【英文标题】:Creatingagenericupdate/installscriptfromaSqlServerDatabaseProject【发布时间】:2016-06-2013:14:27【问题描述】:您能否从VS2015中的SqlServerDb项目创建一个通用的部署脚本,不需要针对... 查看详情

从 C# 数据表创建 SQL Server 表

】从C#数据表创建SQLServer表【英文标题】:CreatingaSQLServertablefromaC#datatable【发布时间】:2010-11-2320:07:19【问题描述】:我有一个使用C#手动创建并加载数据的DataTable。在SQLServer2005中使用DataTable中的列和数据创建表的最有效方法是... 查看详情

从 DataSet 创建 SQL Server DB

...我在DataSet中读取了xsd和xml文件,现在我想从DataSet中创建数据库foreach(DataTabledtintemp.Tables)foreach(DataColumndcindt.Columns)//exampleforonecolumnSql 查看详情

如何使用 json 从 sql server ASP.net 中检索数据

...13:27【问题描述】:我正在尝试使用asp.net3.5中的web服务从数据库中填充列表使用C#和jquerymobile。当我运行站点时它工作正常,但是当我将它发布到我的服务器时它不会填充列表并且ajax错误函数会捕获一个错误。 查看详情

从脚本文件夹创建或调整 SQL Server 数据库

】从脚本文件夹创建或调整SQLServer数据库【英文标题】:CreatingoradaptingaSQLServerdatabasefromascriptsfolder【发布时间】:2013-10-0409:13:27【问题描述】:我目前有一个代表数据库的源代码控制目录(即它为表、存储过程等创建脚本)。这... 查看详情

创建 SSIS 包 - 将数据从 Oracle 复制到 SQL Server

】创建SSIS包-将数据从Oracle复制到SQLServer【英文标题】:CreateaSSISPackage-ToCopydatafromOracletoSQLServer【发布时间】:2012-06-1206:49:05【问题描述】:我想编写一个SSIS包,用于将数据从oracle复制到MSSql服务器。而且条件是,通过在SQL中选... 查看详情

在 SQL Server 中读取 JSON 数据时无法从字符串转换为日期时间

】在SQLServer中读取JSON数据时无法从字符串转换为日期时间【英文标题】:CannotConvertfromStringtoDatetimewhilereadingJSONdatainSQLServer【发布时间】:2021-12-2809:32:36【问题描述】:DECLARE@JSONASvarchar(MAX)SET@JSON=\'["UserId":"XYZ12345","LoginTime":"2021-12-... 查看详情

基于 SQL server 2008 中的属性从大型数据库创建视图

】基于SQLserver2008中的属性从大型数据库创建视图【英文标题】:CreatingViewsfromalargedatabaseonthebasisofattributesinSQLserver2008【发布时间】:2014-08-1205:54:23【问题描述】:我有一个大型数据库,其中包含不同项目、业务线、地理位置的不... 查看详情

从 AJAX JSON 提交到 SQL Server --> Web 方法

...从通过AJAX提交到WebMethod的网页中获取数据,并最终进入数据库。一旦AJAXGet方法完成,我对如何处理Web方法代码块感到困惑。这是我的AJAXfunctionUpdat 查看详情

从 SQL Server 2008 的 .mdf 和 .ldf 文件创建 MySQL 数据库

】从SQLServer2008的.mdf和.ldf文件创建MySQL数据库【英文标题】:CreateMySQLdatabasefrom.mdfand.ldffilesfromSQLServer2008【发布时间】:2016-10-0808:20:19【问题描述】:我有一些数据库大小超过10GB的.mdf和.ldf文件。我想用同样的方法创建一个MySQL数... 查看详情

从视图填充或创建表的 SQL Server 过程 - 性能问题

...2016-11-2216:30:57【问题描述】:我编写了以下代码来从我的数据库中的所有相应视图(v_)填充/创建表(t_)。我将以前的脚本从使用光标转换为提高运行速度。我还能做些什么来让它表现得更好吗?感谢任何帮助。请 查看详情

创建从 linq 到 SQL 查询输出的特定 json 响应?

...0-1610:22:03【问题描述】:我正在开发WebAPI。我正在从一个数据库表中获取数据:DispatchDatadta=newDispatchData();using(SalesDataContextoSqlData4=newSalesDa 查看详情

Laravel - 从 JSON 数组创建对象以将其保存在 SQL 数据库中

】Laravel-从JSON数组创建对象以将其保存在SQL数据库中【英文标题】:Laravel-CreatinganobjectfromaJSONarraytosaveitinaSQLdatabase【发布时间】:2018-01-0320:07:37【问题描述】:我想要做的是将一个JSON数组(从Guzzle获得)发送到我的SQL数据库。... 查看详情

SQL Server 2005 - 用户权限

...在SQLServer2005中创建了一个名为“tuser”的用户,具有创建数据库权限。并将master和msdb数据库的“db_owner”数据库角色赋予“tuser”。当我运行创建数据库的脚本时,从这个用户登录开始,它将创建新的数据库。但是“tuser”无权... 查看详情

从 SQL Server 表中读取 Json 值

】从SQLServer表中读取Json值【英文标题】:ReadJsonValuefromaSQLServertable【发布时间】:2020-12-2209:59:31【问题描述】:我有一个Json值作为ntext存储在SQLServer表中:JSON(列:json_val):["prime":"image":"id":"123","logo":"","productId":"4000","enable":tru... 查看详情

如何从同时列出数据和模式的 JSON 文件创建 Spark-SQL 数据框

】如何从同时列出数据和模式的JSON文件创建Spark-SQL数据框【英文标题】:HowtocreateaSpark-SQLdataframefromJSONfilewheredataandschemaarebothlisted【发布时间】:2020-08-0512:53:03【问题描述】:conf=SparkConf().setAppName("PySpark").setMaster("local")sc=SparkConte... 查看详情