10

AjaxとJSON形式を理解し始めたところです。とてもシンプルな名簿を作っています。したがって、簡単にするために3つの列があるテーブルがあると仮定します。

Name, Email and Phone

私のjavascript/jqueryは学習するのに最適ではありませんが、SQLServerから返されたデータをJSON形式に変換したいと思います。jsonファイルを作成できるストアドプロシージャを作成し、JavaScriptで使用できるフォルダーに配置する必要がありますか?

それとも、これはクライアントC#/ VB.netアプリが、たとえば5分ごとに実際にファイルを生成する場所で実行する必要があるようなものですか?基本的に、私がいくつかのデータを取り戻すと仮定しましょう:

George g@yahoo.com 123-3333
Mike m@gmail.com 123-4433
Steve s@gmail.com 144-3333
Jill r@gmail.com 333-3333

これは、単純なselectステートメントから取得します。

SELECT name, email, phone from myTable

次に、これをjsonファイルとして取得して、データをに.json保存し、そのファイルをjavascriptコードで使用できるようにするにはどうすればよいですか。誰かがこれと人々がjsonファイルを生成する方法を説明できますか?

4

2 に答える 2

10

通常、これを行うためのより良い方法は、JSONをWebAPIを介して提供することです。

ASP.NETMVCでこれを行う方法の例を次に示します。

http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

public class Contact
{
  public string Name {get;set;}
  public string Email {get;set;}
  public string Phone {get;set;}
}

public class ContactsController : ApiController
    {
        // instead of having the contacts in memory, you can load them from the database using Entity Framework, Dapper.NET - or you other favorite ORM.
        Contact[] contacts = new Contact[] 
        { 
            new Contact{ Name = "George", Email = "g@yahoo.com", Phone = "123-3333" }, 
            new Contact{ Name = "Mike", Email = "m@yahoo.com", Phone = "123-3333" }, 
            new Contact{ Name = "Steve", Email = "s@yahoo.com", Phone = "123-3333" } 
        };

        public IEnumerable<Contact> GetAllContacts()
        {
            return contacts;
        }
    }

次にhttp://localhost:xxxx/api/contacts/、次を参照します。データを表示できます。javascriptを使用して、JSON形式でデータを取得できます。Web APIが、JSONへの変換を処理します。

舞台裏では、ASP.NETMVCはNewtonSoftのJSON.NETを使用してクラスをJSONに変換しています。これはオープンソースであり、あらゆる.NETアプリケーションで使用できます。

http://james.newtonking.com/pages/json-net.aspx

jQueryを使用してデータを取得する:

<script type="text/javascript">
    $(document).ready(function () {
        // Send an AJAX request
        $.getJSON("api/contacts/",
        function (data) {
            // On success, 'data' contains a list of contacts.
            $.each(data, function (key, val) {

                console.log(val.Name, val.Phone, val.Email);  
            });
        });
    });
</script>

プロジェクトでASP.NETWebフォームを使用している場合は、代わりに次の操作を実行できます。

asp.netWebフォームjsonが結果を返す

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public List<Contact> GetAllContacts()
{
  return contacts;
}
于 2012-11-15T15:00:35.807 に答える
1

過去に使用した基本的なSQLtojsonロジックの一部を利用できる場合がありますが、データセットに固有のものである可能性があります。私はそれを少し一般化しようとしました。

SET NOCOUNT ON;

--sample table
CREATE TABLE #Temp(
    Id INT Identity(1,1),
    Column1 INT,
    Column2 VARCHAR(10),
    Column3 VARCHAR(10)
    )
;

INSERT INTO #Temp(Column1, Column2, Column3) VALUES (10,'Test', 'Test2'), (20, 'Test3', 'Test4'), (30, 'Test5', 'Test6');

WITH 
    cte AS(
        SELECT  Id AS RowId,
                CAST(Id AS VARCHAR(100)) AS Id,
                CAST(Column1 AS VARCHAR(100)) AS Column1,
                CAST(Column2 AS VARCHAR(100)) AS Column2,
                CAST(Column3 AS VARCHAR(100)) AS Column3
        FROM #Temp
        ),
    cte2 AS (
        SELECT  RowId,
                '"' + PropertyName + '"' + ':' + CASE WHEN ISNUMERIC(Value) = 1 THEN Value ELSE '"' + Value + '"' END AS Value,
                ROW_NUMBER() OVER(PARTITION BY RowId ORDER BY CASE WHEN PropertyName = 'Id' THEN '' ELSE PropertyName END) AS RowNum,
                ROW_NUMBER() OVER(ORDER BY RowId) AS RowNum2
        FROM cte
            UNPIVOT(
                Value
                FOR PropertyName IN (
                    Id,
                    Column1,
                    Column2,
                    Column3
                    )
                ) upvt
        )
        SELECT  CASE WHEN cte2.RowNum2 = y.MinRowNum THEN '[' ELSE '' END,
                CASE WHEN cte2.RowNum = x.MinRowNum THEN '{' ELSE '' END,
                cte2.value,
                CASE WHEN cte2.RowNum <> x.MaxRowNum THEN ',' ELSE '' END,
                CASE 
                    WHEN cte2.RowNum = x.MaxRowNum THEN '}' + 
                        CASE WHEN cte2.RowNum2 = y.MaxRowNum THEN '' ELSE ',' END 
                    ELSE '' 
                END,
                CASE WHEN cte2.RowNum2 = y.MaxRowNum THEN ']' ELSE '' END
        FROM cte2
            INNER JOIN (
                SELECT  RowId, 
                        MIN(RowNum) AS MinRowNum, 
                        MAX(RowNum) AS MaxRowNum
                FROM cte2
                GROUP BY RowId
                ) x
                    ON cte2.RowId = x.RowId
            CROSS JOIN (
                SELECT  MIN(RowNum2) AS MinRowNum, 
                        MAX(RowNum2) AS MaxRowNum
                FROM cte2
                ) y
;

/*--outputは次のようになります。

[{"Id":1、
"Column1":10、
"Column2": "Test"、
"Column3": "Test2"}、
{"Id":2、
"Column1":20、
"Column2": "Test3 "、
" Column3 ":" Test4 "}、
{" Id ":3、
" Column1 ":30、
" Column2 ":" Test5 "、
" Column3 ":" Test6 "}] * /

于 2016-03-23T20:12:53.997 に答える