我之前是用實體資料庫模型打進去
但後來發現好像可以不用
改用字串連進db
我想知道怎麼樣才能把我抓到的第三方api的json資料打入db
已經有在實體db建好跟json資料相對應的欄位了
using (SqlConnection con = new SqlConnection(Connstr))
{
con.Open();
string targetURI = "第三方api網址";
HttpClient client = new HttpClient();
client.MaxResponseContentBufferSize = Int32.MaxValue;
var response = await client.GetStringAsync(targetURI);
//ViewBag.Result = Regex.Unescape(response);
var pharmacies = JsonConvert.DeserializeObject<List<Inserch>>(response);
using (SqlCommand cmd = new SqlCommand("Insert Into Pharmacy(欄位一,欄位二,欄位三,欄位四,欄位五,欄位六) values(@欄位一,@欄位二,@欄位三,@欄位四,@欄位五,@欄位六) ", con))
{
foreach (var data in pharmacies)
{
cmd.Parameters.AddWithValue("data", data);
cmd.Parameters.Add(new SqlParameter("欄位一", data.欄位一));
cmd.Parameters.Add(new SqlParameter("欄位二", data.欄位二));
cmd.Parameters.Add(new SqlParameter("欄位三", data.欄位三));
cmd.Parameters.Add(new SqlParameter("欄位四", data.欄位四));
cmd.Parameters.Add(new SqlParameter("欄位五", data.欄位五));
cmd.Parameters.Add(new SqlParameter("欄位六", data.欄位六));
cmd.ExecuteNonQuery();
}
}
con.Close();
return pharmacies;
}
}
}
我目前是這樣寫
但是沒有成功打進去
想知道要怎改呢@@
順便問一下如果之後要撈出來呈現在view的話
是不是在這邊
data.欄位一;的後面直接加Tostring()比較好呢
麻煩各位大大了
用try catch 包起來看有沒有發生錯誤
新手學會怎麼除錯對以後有幫助
我只講最關鍵的
你的foreach (var data in pharmacies) 要放在
using (SqlCommand cmd = new SqlCommand("Insert Into Pharmacy(欄位一,欄位二,欄位三,欄位四,欄位五,欄位六) values(@欄位一,@欄位二,@欄位三,@欄位四,@欄位五,@欄位六) ", con))
外面
我自己測試有寫入
已經說用try catch 查看錯誤了,不知為何不做?
我自己用,一下就看到錯誤訊息改好程式碼了
回復大大
我昨天後來有成功寫入了
有改了一點方式
您說的也對,我的迴圈確實要放在外層
至於try catch 的部分
可能我也還不熟悉
昨天試沒看出個所以然
我會再繼續增進自己的
也謝謝不吝嗇指教
ADO.NET 是比較古老但基礎的寫法,
等你練習的比較多,熟悉SQL語法後,
可以改學Dapper、EntityFramework。
然後try catch 可以這樣寫,Exception會顯示出錯誤訊息。
try
{
//主程式碼
}
catch (Exception e)
{
throw new Exception(e.Message);
}
如果你的資料庫是 SQL SERVER 2016 以上有支援 JSON ,可以直接用 SQL 來拆解並寫到資料庫裡面去。
(個人)覺得這樣子的方式很適合,可以參考 MSDN 的相關說明 MSDN SQL JSON
我個人建議,最好還是要做反序列化,將json反解回來,再做DB的處理
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
}
string json = @"{ 'Name':'王小明','Age':'8','ID':'1','Sex':'男'}";
Student descStudent = JsonConvert.DeserializeObject<Student>(json);//反序列化
Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descStudent.ID, descStudent.Name, descStudent.Age, descStudent.Sex));
反序列化: ID=1,Name=王小明,Sex=8,Sex=男
string json = @"{
'Email': 'james@example.com',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
'User',
'Admin'
]
}";
Account account = JsonConvert.DeserializeObject<Account>(json);
string connstr = @"connstr";
SqlConnection connection = new SqlConnection(connstr);
connection.Open();
string listvalue = string.Join(",", account.Roles);
string sql = "insert into Account(Email,Active,CreatedDate,Roles) values(@Email,@Active,@CreatedDate,@Roles)";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.AddWithValue("@Email",account.Email);
cmd.Parameters.AddWithValue("@Active", account.Active);
cmd.Parameters.AddWithValue("@CreatedDate", account.CreatedDate);
cmd.Parameters.AddWithValue("@Roles",listvalue);
cmd.ExecuteNonQuery();
connection.Close();