【发布时间】:2018-03-29 12:05:13
【问题描述】:
我需要将dataset 传递给Web API 以将dataset 存储在数据库中。这是我的 C# 客户端代码。以前我会传递这样的人员数据(commented line)。但这次我有一个Dataset。如何使用 http POST 将dataset 传递给 web api?
DataSet rslt;
在这个dataset 中,有四列pid,proid,name,msg
private void btnInsert_Click(object sender, EventArgs e)
{
using (var client = new HttpClient())
{
try
{
//person p = new person { PID = 1, ProjectID = 5, Name= "paul", Msg = "hello"};
client.BaseAddress = new Uri("http://localhost:10927/");
var response = client.PostAsJsonAsync("api/Person", p).Result;
if (response.IsSuccessStatusCode)
{
Console.Write("Success");
}
else
Console.Write("Error");
}
catch (Exception x)
{
Console.WriteLine(x.Message);
}
}
}
在我的 Web API 中,我的控制器类的这一部分:
public HttpResponseMessage Post([FromBody]Person value)
{
long id;
PersonPersistence dp = new PersonPersistence();
id = dp.addPerson(value);
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
response.Headers.Location = new Uri(Request.RequestUri, string.Format("Manager/{0}", id));
return response;
}
这是我PersonPersistence.class的一部分
public long addPerson(Person t)
{
long id = 0;
try
{
string sqlString = "INSERT INTO tblperson(pid,proid,name,dis) VALUES (@1,@2,@3,@4);";
MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sqlString, conn);
cmd.Parameters.AddWithValue("@1", t.Time);
cmd.Parameters.AddWithValue("@2", t.Date);
cmd.Parameters.AddWithValue("@3", t.Batch);
cmd.Parameters.AddWithValue("@4", t.Leture);
cmd.ExecuteNonQuery();
id = cmd.LastInsertedId;
return id;
}
catch (MySqlException x)
{
Console.WriteLine(x.Number);
}
return id;
}
【问题讨论】:
-
使用 DataSet 很糟糕,但如果您确实需要这样做,我会将其序列化/反序列化为 XML
-
@hardkoded 我是这个领域的新手先生,我对此不太了解。请帮我解决
-
如果你想使用
DataSet(不管是什么原因),我认为最完美的方法是,如果你发送XML并且你可以很容易地用@将你的DataSet序列化为XML 987654334@'sGetXml()方法,然后在服务器端,使用DataSet'sReadXml(XmlReader.Create(new StringReader(xml)))将其反序列化。 -
@SeM 先生,你能给我一个示例代码吗,我不清楚这个
标签: c# dataset http-post asp.net-web-api2 parameter-passing