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