将 API 中的值插入数据库

Inserting value from API to database

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

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))有如下错误:

ServerVersion = '((System.Data.SqlClient.SqlConnection)db).ServerVersion' threw an exception of type 'System.InvalidOperationException'

连接字符串非常好,我仔细检查了 app.config,如下所示:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add connectionString="Server= SERVER.database.windows.net;Database=SERVER_dev;User Id=user; Password=asd;" name="DefaultConnectionString" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

如前所述 in this answer,试试这个:

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 代码块内声明的所有内容都将被释放。