C#插入与主键具有相同值的外键

时间:2020-06-22 06:30:40

标签: c# sql-server

如何从引用FK_clubID的{​​{1}}表插入ClubMember

我在Clubs(clubID)上使用identity (1,1),我应该为clubID添加值吗?

FK_clubID

2 个答案:

答案 0 :(得分:1)

您需要更改第一种方法以返回刚刚插入的ClubID

public int addclubs(string clubname, DateTime established, byte[] images, string activate)
{
    string insertSQL = @"INSERT INTO Clubs(club_name,established,image,activate)
                         Values(@club,@esb,@img,@acv);
                         SELECT SCOPE_IDENTITY()";
    Connect();
    SqlCommand cmd = new SqlCommand(insertSQL, conn);
    cmd.Parameters.AddWithValue("@club", clubname);
    cmd.Parameters.AddWithValue("@esb", established);
    cmd.Parameters.AddWithValue("@img", images);
    cmd.Parameters.AddWithValue("@acv", activate);
    int newClubID = cmd.ExecuteScalar();
    return newClubID;
}

通过这种方式,您可以获得使用连接实例插入的最后一个标识值。当然,您可以将其添加到查询中,以更新该俱乐部的成员,从而更改当前查询以在其列中也添加此参数。

请注意,如果俱乐部表上有一个触发器可以在其他带有身份列的表中插入数据,则您连接中最后插入的身份可能会有所不同

与您当前的问题无关,对于您的代码,我还有另外两个建议。首先,尝试使用对象表示Clubs和ClubMembers,目前尚不清楚您是否只有一堆简单变量,或者是否具有更结构化的方式来表示数据模型。其次,不要使用AddWithValue。这很方便,但是在性能和​​可靠性方面都有许多缺点。参见AddWithValue is Evil

答案 1 :(得分:0)

假设您的“ ClubMember”数据库表中有一列名为“ clubID”,该列具有“ Club”表中具有主键的外键约束,这就是您插入值的方式:

public void addclubmember(string presidentID , string viceID, string secID, 
string president, string vice, string sec, string clubID)
{
    string updateSQL = "INSERT INTO 
    ClubMember(presidentID,viceID,secID,president,vice,sec, clubID) VALUES 
    (@prs,@vice,@sec,@prsn,@vicen,@secn, @clubID)";
    Connect();
    SqlCommand cmd = new SqlCommand(updateSQL, conn);
    cmd.Parameters.AddWithValue("@prs", presidentID);
    cmd.Parameters.AddWithValue("@vice", viceID);
    cmd.Parameters.AddWithValue("@sec", secID);
    cmd.Parameters.AddWithValue("@prsn", president);
    cmd.Parameters.AddWithValue("@vicen", vice);
    cmd.Parameters.AddWithValue("@secn", sec);
    cmd.Parameters.AddWithValue("@clubID", clubID);

    cmd.ExecuteNonQuery();
}