Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值从API插入数据库_C#_Sql Server_Console Application - Fatal编程技术网

C# 将值从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

我创建了一个ConsoleApplication,它从API获取信息,然后将其中一个值从数据库放入表中。一切都很好(比如获取值并用它们填充对象数据),但我似乎无法找到将其推送到数据库的方法

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);
}