繁体   English   中英

访问 class 中的列表,然后插入数据库

[英]Access a list in a class then insert into database

我在访问 class 中的列表时遇到问题。

下面是我创建的类。 在 class 基准中,有一个名为位置的列表。

public class Location
{
    public string location { get; set; }
    public string remarks { get; set; }
    public string deliverydate { get; set; }
    public string pickupdate { get; set; }
}

public class Datum
{
    public string tracking_number { get; set; }
    public string pickup_place { get; set; }
    public string delivery_place { get; set; }
    public string tel_no { get; set; }
    public string status { get; set; }
    public DateTime lastupdate_time { get; set; }
    public List<Location> Location { get; set; }
}

public class Root
{
    public List<Datum> data { get; set; }
}

我想使用 List 将值插入数据库。 但是下面的代码给出了一个错误:

“type”不包含“name”的定义,并且找不到接受“type”类型的第一个参数的可访问扩展方法“name”(您是否缺少 using 指令或程序集引用?)。 在线

foreach ( var p in data.Root)
{
  string tracking_number = p.tracking_number;
  string pickup_place = p.pickup_place;
  string delivery_place = p.delivery_place;
  string tel_no = p.tel_no ;
  string status = p.status ;
  datetime lastupdate_time = p.lastupdate_time ;

  // start from this line, gives CS1061 error
  string location = p.Location.location ;
  string remarks = p.Location.remarks ;
  string deliverydate  = p.Location.deliverydate;
  string pickupdate = p.Location.pickupdate;

  query = "INSERT INTO Tracking (tracking_number, pickup_place, delivery_place, tel_no, status,
  lastupdate_time, location, remarks, deliverydate , pickupdate) VALUES (tracking_number,
  pickup_place, delivery_place, tel_no, status, lastupdate_time, location, remarks, deliverydate ,
  pickupdate);    
}

我怎么解决这个问题? 我试图寻找解决方案,但没有任何效果。

请尝试以下代码,您需要另一个位置循环

foreach (var p in data.Root)
{
  string tracking_number = p.tracking_number;
  string pickup_place = p.pickup_place;
  string delivery_place = p.delivery_place;
  string tel_no = p.tel_no;
  string status = p.status;
  DateTime lastupdate_time = p.lastupdate_time;
    
  // Other information will be same for the all location
   foreach (var item in p.Location)
   {
    string location = item.location;
    string remarks = item.remarks;
    string deliverydate = item.deliverydate;
    string pickupdate = item.pickupdate;
         query = "INSERT INTO Tracking (tracking_number, pickup_place, delivery_place, tel_no, status,
      lastupdate_time, location, remarks, deliverydate , pickupdate) VALUES(tracking_number,
      pickup_place, delivery_place, tel_no, status, lastupdate_time, location, remarks, deliverydate,
      pickupdate);
   }
}

建议

  1. 准备你的根 class。
  2. 使用 newtonsoft Z466DEEC76ECDF35FCA6D4Z38571 在 SQL 服务器中将整个根 class 作为 JSON 字符串传递。 Var json = Json.Serialize(rootObject)
  3. 在 SQL 服务器中获取此 JSON 并从该 JSON 中提取位置和其他相应数据。
  4. 而不是使用循环,只需使用 Insert / Select 组合将您的位置作为集合/子集插入。

你的过程 header 应该是这样的

Create proc Usp_InsertDatum (@json nvarchar(max))

在 C#

command.Parameters.AddWithValue("@json", json)

这是 JSON 和 SQL 服务器的 SQL 小屋链接。 https://www.sqlshack.com/how-to-parse-json-in-sql-server/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM