C# 如何在SQL Server中增加外键中的id

C# 如何在SQL Server中增加外键中的id,c#,sql-server,C#,Sql Server,我有两个数据库表dtadd,列为address,city和id,这是外键,另一个表是dtperson,列为name,age和id,这是主键。我只想知道如何在外键中增加id 这是我的密码: private void button1_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); con.ConnectionString = "server=.;database = mydata

我有两个数据库表
dtadd
,列为
address
city
id
,这是外键,另一个表是
dtperson
,列为
name
age
id
,这是主键。我只想知道如何在外键中增加id

这是我的密码:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection();
    con.ConnectionString = "server=.;database = mydata2;integrated security = true";
    con.Open();

    for (int i = 0; i < dataGridView1.Rows.Count-1 ; i++)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "insert into dtperson1 (name,age)values('" + dataGridView1.Rows[i].Cells[0].Value + "','" + dataGridView1.Rows[i].Cells[1].Value + "')";

        cmd.Connection = con;
        cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();

        cmd.CommandText = "insert into dtadd (address,city)values('" + dataGridView1.Rows[i].Cells[2].Value + "','" + dataGridView1.Rows[i].Cells[3].Value + "')";

        cmd.ExecuteNonQuery();
        cmd.Parameters.Clear();
    }

    MessageBox.Show("datainserted");
}            
private void按钮1\u单击(对象发送者,事件参数e)
{
SqlConnection con=新的SqlConnection();
con.ConnectionString=“服务器=;数据库=mydata2;集成安全性=true”;
con.Open();
对于(int i=0;i
您需要在
dtperson
表中使用自动递增设置主键列

将行插入到
dtperson
后,需要获取最后插入的记录id

select @id = Scope_Identity()

使用此
id
作为
dtadd
表的外键id

您需要在
dtperson
表中使用autoincrement设置主键列

将行插入到
dtperson
后,需要获取最后插入的记录id

select @id = Scope_Identity()

使用此
id
作为
dtadd
表的外键id

首先,您需要在数据库中将主键设置为自动递增 要获取最近添加的行的值

这就是你要找的问题。但在您的例子中,若您想在添加person的行之后获得它的值,那个么您可以使用

 using (var con = new SqlConnection(ConnectionString)) {
        int newID;
        var cmd = "insert into dtperson1 (name,age)values(@val1,@val2);SELECT CAST(scope_identity() AS int)";
        using (var insertCommand = new SqlCommand(cmd, con)) {
            insertCommand.Parameters.AddWithValue("@val1", dataGridView1.Rows[i].Cells[0].Value);
   insertCommand.Parameters.AddWithValue("@val2", dataGridView1.Rows[i].Cells[1].Value);
            con.Open();
            newID = (int)insertCommand.ExecuteScalar();
        }
    }

首先,您需要在数据库中将主键设置为自动递增 要获取最近添加的行的值

这就是你要找的问题。但在您的例子中,若您想在添加person的行之后获得它的值,那个么您可以使用

 using (var con = new SqlConnection(ConnectionString)) {
        int newID;
        var cmd = "insert into dtperson1 (name,age)values(@val1,@val2);SELECT CAST(scope_identity() AS int)";
        using (var insertCommand = new SqlCommand(cmd, con)) {
            insertCommand.Parameters.AddWithValue("@val1", dataGridView1.Rows[i].Cells[0].Value);
   insertCommand.Parameters.AddWithValue("@val2", dataGridView1.Rows[i].Cells[1].Value);
            con.Open();
            newID = (int)insertCommand.ExecuteScalar();
        }
    }

你想用increment它的值做什么?这样我就可以用id获取人名,你可以执行'select@id=Scope\u Identity()'查询它将返回最近添加的行的主键。我可以将此查询放在何处?您可以告诉我吗?您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-检查您想用增量it的值做什么?这样我就可以使用idyou获取人名,您可以执行'select@id=Scope_Identity()'查询它将返回最近添加的行的主键。我可以将此查询放在哪里?请告诉我-您不应该将SQL语句连接在一起-使用参数化查询来避免SQL注入-签出