Как получить данные результата запроса SQL Server в формате JSON?
Я только начинаю понимать формат Ajax и JSON. Я создаю очень простую адресную книгу. Предположим у меня есть таблица с для простоты имеет 3 колонки:
Name, Email and Phone
мой javascript / jquery не лучший просто обучение, но я хочу поместить данные, возвращенные с моего SQL Server в формат 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?
2 ответов
обычно лучший способ сделать это-иметь JSON, обслуживаемый через некоторый веб-api.
вот пример того, как это сделать в ASP.NET MVC:
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. Веб-API заботится о его преобразовании в JSON для вы.
за кулисами ASP.NET MVC использует 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.NET веб-формы, вы можете сделать следующее вместо этого:
asp.net возврат веб-форм json результат
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Contact> GetAllContacts()
{
return contacts;
}
вы можете использовать некоторые из моих рудиментарных sql для логики json, которые я использовал в прошлом... но это может быть специфично для моего набора данных. Я пытался genericize это немного.
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
;
/* -- выход будет следующим:
[ {"Id": 1 ,
"Column1": 10,
"Column2": "Test",
"Столбец3":"Условие_2" },
{"Id": 2,
"Column1": 20,
"Column2": "Test3" ,
"Column3":" Test4"},
{"Id": 3,
"Column1": 30,
"Column2": "Test5",
"Column3": "Test6" } ]
*/