【问题标题】:Same Primary Key Pointing to Multiple Values in a Column. Insertion in C#相同的主键指向列中的多个值。 C#中的插入
【发布时间】:2019-11-08 11:38:51
【问题描述】:

我无法做到并发现如何在与单个主键关联的单个列中插入多个值。

这是我期望在我的 sql 数据库中的内容:

  • 我已启用主键(packageid)的自动递增
  • serviceidF 是外键

       for (int i = 0; i < 2; i++)
          {
              if (i == 0)
              {
                query = "Insert Into tbl_Packages (packageName, 
                packagePrice, serviceId_F) values ('" + _ppnM3 + "', '" + 
                _pppM3 + "', '" + _i1M3 + "')";
                cmd = new SqlCommand(query, PC.connect());
                cmd.ExecuteNonQuery();
                PC.disconnect();
    
              }
            else if (i == 1)
            {
                query1 = "Insert Into tbl_Packages (packageName, 
                packagePrice, serviceId_F) values ('" + _ppnM3 + "', '" + 
                _pppM3 + "', '" + _i2M3 + "')";
                cmd1 = new SqlCommand(query1, PC.connect());
                cmd1.ExecuteNonQuery();
                PC.disconnect();
            }
         }
    

这就是我的查询正在做的事情(我知道我已经在主 ID 中启用了自动递增):

【问题讨论】:

  • 如果您的 packageId 是主键,那么它将不允许您在多行中插入相同的值。 PK 允许非空值和唯一值。请检查您的数据模型。
  • @RajPaliwal 我知道 PK 允许非空值和唯一值。我要求解决方案为与一个主键关联的单个字段获取多个值。
  • 请尝试创建具有多列的composite primary 键。请注意,在这种情况下,所有值的组合必须是唯一的。它可以接受 PackageId 的相同值,但其余列必须是唯一的
  • 为此,我认为您应该使用另一个表作为详细信息表。
  • @Hasnain 如果它是一个 PK,它就不能有多个与之关联的行。这就是数据库的工作方式。解决方案取决于包和服务之间的关系。如果它是一对多的,即每个服务只能与一个包相关,请在您的服务表中放置一个PackageID 列。否则创建一个单独的表,例如 PackageServices,其中 PackageId 和 ServiceId 列都是 PK 的一部分

标签: c# sql sql-server database rdbms


【解决方案1】:

如果您认为需要多个具有相同值的 PK,则您的数据模型是错误的。 PK的部分定义是唯一性。

另外,使用参数而不是字符串连接。

另外,for....if 是什么?你刚才说的 2 个语句很复杂!

也许您缺少一个实际的“包”表,而您正在构建的是一个“子包”表,其中包 ID 是 FK 而不是 PK。不过很难说。

【讨论】:

  • 忽略那个 for 循环!这背后有一个发展逻辑。告诉我如何在单个列中获取与一个主键关联的多个值。
  • @Hasnain LoztInSpace 的回答解释说,PK 是唯一的根据定义。如果要将多个值与其关联,请将它们存储在同一行的不同列中。或者使用不同的表来存储相关数据。
  • 不同的表!
猜你喜欢
  • 2019-05-25
  • 2018-09-08
  • 2017-01-09
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多