Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据库中插入具有不同值的相同ID_C#_Asp.net - Fatal编程技术网

C# 在数据库中插入具有不同值的相同ID

C# 在数据库中插入具有不同值的相同ID,c#,asp.net,C#,Asp.net,我想在数据库中插入具有不同值的相同id。基本上,它是一个允许用户添加新奖学金的表单,其中包含一些标准。并非所有奖学金都适用于所有课程。因此将有两个表格,奖学金将接受新的奖学金,奖学金课程将处理课程资格 我想同时插入两个数据。当用户按submit时,奖学金表中的奖学金id将自动递增,而scholarshipcourse表将采用新的奖学金id并插入 例如: 表4:学校课程: 表1: 假设scholarship_id 3是新添加的奖学金,如何获取该id并同时插入scholarshipcourse表中

我想在数据库中插入具有不同值的相同id。基本上,它是一个允许用户添加新奖学金的表单,其中包含一些标准。并非所有奖学金都适用于所有课程。因此将有两个表格,奖学金将接受新的奖学金,奖学金课程将处理课程资格

我想同时插入两个数据。当用户按submit时,奖学金表中的奖学金id将自动递增,而scholarshipcourse表将采用新的奖学金id并插入

例如:

表4:学校课程:

表1:

假设scholarship_id 3是新添加的奖学金,如何获取该id并同时插入scholarshipcourse表中

我可以使用此select语句:

INSERT INTO user (name) 
VALUES ('John Smith');

INSERT INTO user_details (id, weight, height)
VALUES (SELECT(id FROM user WHERE name = 'John Smith'), 83, 185); 
但是我如何获得刚刚添加的最新id

我需要在DAL中插入以下内容:

公共数据表teststring名称,string课程 {

        SqlCommand cmd = new SqlCommand();
        SqlConnection myConnection = new SqlConnection(strConnectionString);

        cmd.Connection = conn;
        cmd.CommandText = "INSERT INTO Table1(schName)  values (@schName)";
        cmd.Parameters.AddWithValue("@schName", name);
        conn.Open();
        int i = cmd.ExecuteNonQuery();
        int id = (int)cmd.ExecuteScalar();

        cmd.CommandText = "Select SCOPE_IDENTITY();INSERT INTO Table2(ScholarshipID,DiplomaCourse) values (@id,@course)";
        cmd.Parameters.AddWithValue("@id", id);
        cmd.Parameters.AddWithValue("@course", course);


        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;

    }
它已成功添加到两个表中,但未检索最后一个id并插入到表中

范围\u标识是一种可能的解决方案

范围标识的描述:

基本上,您可以插入奖学金表,并获得带有SCOPE_标识的id。然后,使用该id,您可以插入scholarshipCourse表。根据奖学金表名称,类似于这样:

DECLARE @id INT
INSERT INTO scholarshipCourse (course) VALUES ('humanities')
SELECT @id = SCOPE_IDENTITY() --RETRIEVES THE LAST INSERTED ID IN THIS SCOPE
INSERT INTO scholarship (scholarship_id, scholarshipName) VALUES (@id, 'star scholarship')
您可以使用该子句捕获新插入记录的值,包括标识值:

INSERT INTO user (name)
OUTPUT INSERTED.ID
VALUES ('John Smith');

INSERT语句将生成一个结果集,其中包含上述情况下每个插入记录的ID,即一行。您可以像执行查询一样执行该命令,例如,如果插入一行,请使用SqlCommand.ExecuteScalar。

只需将内联select语句替换为scope\u identity函数即可

INSERT INTO user (name) VALUES ('John Smith');
INSERT INTO user_details (id, weight, height) VALUES (scope_identity(), 83, 185);
如果要插入多个详细信息行 您可以声明一个变量并将其值设置为scope\u identity

INSERT INTO user (name) VALUES ('John Smith');
declare @id int
select @id=scope_identity()
INSERT INTO user (name) VALUES ('John Smith');
INSERT INTO user_details (id, weight, height) VALUES (@id, 83, 185);
INSERT INTO user_details (id, weight, height) VALUES (@id, 84, 186);

你不能-你不能同时这样做-将其插入奖学金表并获取id,然后将其插入课程表。因此,在插入新添加的奖学金后,我检索id并插入课程表?我以前有nvr尝试使用scope_identity。这对我来说是新的。还有其他方法吗?scope_identity是公平的标准和推荐。@@IDENTITY也是一种可能,但SCOPE_IDENTITY是推荐的。我看到您已经更新了这个问题。我在回答中添加了一些可能的示例代码。我想我想要相反的结果。所以我想我应该先插入奖学金,然后获取奖学金的id并插入scholarshipcourse。这是c吗ode工作,或者我需要重新安排代码?我已经用sql查询进行了测试,并成功地按照我想要的方式将其插入数据库。但是我还没有尝试在DAL中进行测试,看看它是否工作。无论如何,感谢您的帮助。如果我有错误,我会回来以正确的方式执行它。为什么用户表在这里?用户表和用户详细信息与此问题无关-看起来你从其他问题复制了答案,甚至没有编辑。请先阅读完整问题,然后看他放在底部的示例!!
INSERT INTO user (name) VALUES ('John Smith');
INSERT INTO user_details (id, weight, height) VALUES (scope_identity(), 83, 185);
INSERT INTO user (name) VALUES ('John Smith');
declare @id int
select @id=scope_identity()
INSERT INTO user (name) VALUES ('John Smith');
INSERT INTO user_details (id, weight, height) VALUES (@id, 83, 185);
INSERT INTO user_details (id, weight, height) VALUES (@id, 84, 186);