获取 REST API 数据并使用 C# 将它们保存到 SQL 表中
Posted
技术标签:
【中文标题】获取 REST API 数据并使用 C# 将它们保存到 SQL 表中【英文标题】:Get rest API data and save them into SQL Table with C# 【发布时间】:2021-12-30 08:05:37 【问题描述】:这就是我要找的。我需要从 rest api 获取数据并将其插入到我的 SQL 表中。 我已经在这里和谷歌上搜索了一个解决方案,但他们从来没有满足我的需求。我对编码很陌生,所以我很难理解所有步骤。
这是我目前所拥有的:
-
我尝试调用 api(有效)
在 DataTable 中填充数据(不工作)
将它们插入到 SQL 表中
这是我的代码:
protected void btnAPI_OnClick(object sender, EventArgs e)
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072;
using (WebClient client = new WebClient())
client.Credentials = new NetworkCredential(username,password);
string json = client.DownloadString("https://XXXX/XXXX001?view=expand");
JObject jArray = JObject.Parse(json);
var dt = JsonConvert.DeserializeAnonymousType(json, new Content = default(DataTable)).Content; //On this point the code gets an error and it stops
for (int i = 0; i < dt.Rows.Count; i++)
connection(); //This is my connection string. It works!
sqlConn.Open();
using (sqlConn)
string qry = "INSERT INTO myTable VALUES(@name, @age, @date)";
connection();
sqlConn.Open();
using (SqlCommand cmd = new SqlCommand(qry, sqlConn))
cmd.Parameters.AddWithValue("@name", dt.Rows[i]["name"].ToString());
cmd.Parameters.AddWithValue("@age", dt.Rows[i]["age"].ToString());
cmd.Parameters.AddWithValue("@date", dt.Rows[i]["date"].ToString());
cmd.ExecuteNonQuery();
sqlConn.Close();
这里是json:
"@count": 2,
"@start": 1,
"@totalcount": 2,
"Messages": [],
"ResourceName": "user",
"ReturnCode": 0,
"content": [
"user":
"name": "Eric",
"age": "25",
"date": "2021-10-23T11:18:10+00:00",
,
"user":
"name": "Paul",
"age": "30",
"date": "2021-10-23T11:18:10+00:00",
]
这里的错误:
Newtonsoft.Json.JsonSerializationException: 'Unexpected JSON token when reading DataTable: StartObject. Path 'content[0].user', linke 9, position 20.'
我认为问题在于获取的 json 在内容下具有带有子属性的属性。但我不知道如何解决这个问题。
非常感谢您的帮助。
问候, 编辑
【问题讨论】:
您发布的json无效。能贴出真实的json吗? "@count": 2, "@start": 1, "@totalcount": 2, "Messages": [], "ResourceName": "user", "ReturnCode": 0 ,“内容”:[ “用户”:“名称”:埃里克,“年龄”:“25”,“日期”:“2021-10-23T11:18:10 + 00:00”,, “用户”:“姓名”:保罗,“年龄”:“30”,“日期”:“2021-10-23T11:18:10+00:00”,, 这是我在使用 api 时得到的 您的 JSON 以右大括号开头?那是无效的json。生成 json 的任何东西都做得非常糟糕。我看到以逗号结尾的部分,这也是无效的。询问创建此 json 的人使用有效的 JSON 生成器。我猜他们正在尝试手动操作(但失败了)。 很抱歉。只是复制错误。应该工作正常。由于隐私问题,我只需要修改内容。 json现在应该是好的。我更新了它 【参考方案1】:首先,从循环中删除连接声明,因为您的应用程序会因此而遭受性能下降(最大化池)
其次,最好将 API 的响应转换为对象;那么它会让你的工作更容易完成。
现在,问题可能是,
API 中 name 参数的数据类型不是字符串。因此,您需要将其与列属性类型对齐
确保 JSON 格式正确。它应该是字符串:字符串 例如“名称”:“***”
【讨论】:
感谢您的回答。我会从循环中删除连接 - 谢谢 1.你是对的,这应该是一个布尔值。我会改变它。 2. 我无法调整 JSON。这是我正在使用的 api 请求。问题在代码处理我认为的参数之前开始。 将 json 响应映射到一个对象。您不会收到该错误,或者更容易排除故障 你熟悉oop吗? 你能把响应映射到一个对象吗?是的,但非常基本。我为 api 创建了一个模型,但我不确定映射是如何工作的以上是关于获取 REST API 数据并使用 C# 将它们保存到 SQL 表中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中使用 rest api 从 github 为用户(人)获取数据?
如何在 C# 中正确使用 WCF REST API 上的 Stream 将文件(图像/视频/等)上传到服务器?