C# 将值从API插入数据库
我创建了一个ConsoleApplication,它从API获取信息,然后将其中一个值从数据库放入表中。一切都很好(比如获取值并用它们填充对象数据),但我似乎无法找到将其推送到数据库的方法C# 将值从API插入数据库,c#,sql-server,console-application,C#,Sql Server,Console Application,我创建了一个ConsoleApplication,它从API获取信息,然后将其中一个值从数据库放入表中。一切都很好(比如获取值并用它们填充对象数据),但我似乎无法找到将其推送到数据库的方法 class Program { static void Main(string[] args) { HttpClient cons = new HttpClient(); cons.BaseAddress = new Uri("APPURL"); cons.DefaultRequest
class Program
{
static void Main(string[] args)
{
HttpClient cons = new HttpClient();
cons.BaseAddress = new Uri("APPURL");
cons.DefaultRequestHeaders.Accept.Clear();
cons.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
MyAPIGet(cons).Wait();
}
static async Task MyAPIGet(HttpClient cons)
{
using (cons)
{
HttpResponseMessage res = await cons.GetAsync("");
res.EnsureSuccessStatusCode();
if (res.IsSuccessStatusCode)
{
VirtualProduct virtualProduct = await res.Content.ReadAsAsync<VirtualProduct>();
Console.WriteLine("\n");
Console.WriteLine("---------------------Calling Get Operation------------------------");
Console.WriteLine("\n");
Console.WriteLine("Id Name ");
Console.WriteLine("-----------------------------------------------------------");
Console.WriteLine("{0}\t{1}\t", virtualProduct.Id, virtualProduct.Header);
Console.ReadLine();
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString))
{
string insertQuery = @"UPDATE VirtualProduct SET ProductImageId = @Id WHERE Name='@Header';";
var result = db.Execute(insertQuery, virtualProduct);
}
}
}
}
}
如上所述,尝试以下方法:
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString))
{
string insertQuery = @"UPDATE VirtualProduct SET ProductImageId = @Id WHERE Name='@Header';";
if (db.State==ConnectionState.Closed)
{
db.Open();
}
var result = db.Execute(insertQuery, virtualProduct);
}
在使用
using
语句后,在using
代码块中声明的所有内容都将被处理。Post完整异常的可能重复,而不仅仅是部分异常。使用exception.ToString()
,您可以轻松获得完整的异常,包括调用堆栈。没有IDbConnection.Insert
方法,这意味着您正在使用其他库,可能很简洁?在using
之后放置db.Open()
之类的内容后,错误得到了修复。但是,数据库仍然没有得到更新。你有没有想过我到底做错了什么?@Questieme我的回答对你有帮助吗?如果它有助于您解决问题,请在下面发表评论。跟踪你正在做的事情会更容易。另外,你在结果中得到了哪个值?@AndreiDragotoniu谢谢你的建议,但我也包括了编辑过的OP代码。你应该把它标记为一个副本。在任何情况下,都不要复制您不理解的代码-您可能会得到针对原始asnwer的否决票。这个答案完全是错误的。新连接已关闭,没有理由检查其状态。
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString))
{
string insertQuery = @"UPDATE VirtualProduct SET ProductImageId = @Id WHERE Name='@Header';";
if (db.State==ConnectionState.Closed)
{
db.Open();
}
var result = db.Execute(insertQuery, virtualProduct);
}