Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Asp.net asp SQL语句将多行记录插入表中_Asp.net_Sql_Sql Server_Insert_Rows - Fatal编程技术网

Asp.net asp SQL语句将多行记录插入表中

Asp.net asp SQL语句将多行记录插入表中,asp.net,sql,sql-server,insert,rows,Asp.net,Sql,Sql Server,Insert,Rows,我正试图创建一个考勤表来记录学生参加的活动。创建新活动时会触发以下代码。创建新活动时,我希望将所有学生记录插入考勤表,并将默认的Attention属性标记为false。(出席属性用于标记出席,设置为0) 问题是无法填充考勤表。代码将在以下行停止继续:numoRecordsAffected=command.ExecuteNonQuery() 我正在尝试从学生表中获取所有sigstudentid。我不知道在这种情况下是否推荐使用foreach(),但如果有任何帮助,我们将不胜感激 我需要一个解决方案

我正试图创建一个考勤表来记录学生参加的活动。创建新活动时会触发以下代码。创建新活动时,我希望将所有学生记录插入考勤表,并将默认的Attention属性标记为false。(出席属性用于标记出席,设置为0)

问题是无法填充考勤表。代码将在以下行停止继续:numoRecordsAffected=command.ExecuteNonQuery()

我正在尝试从学生表中获取所有sigstudentid。我不知道在这种情况下是否推荐使用foreach(),但如果有任何帮助,我们将不胜感激

我需要一个解决方案

    public int InsertAttendance(int num)
        {
        SqlDataAdapter adapter = new SqlDataAdapter();
        SqlCommand command = new SqlCommand();
        SqlConnection connect = new SqlConnection();
        DataSet dataset = new DataSet();
        String sqlText = "SELECT * FROM Student";
        connect.ConnectionString = "Data Source=TECKISTTLE; Initial Catalog=Assignment;    Integrated Security=True";
        command.Connection = connect;
        command.CommandText = sqlText;

        int numofRecordsAffected = 0;

        adapter.SelectCommand = command;
        connect.Open();
        adapter.Fill(dataset, "StudentData");
        sqlText = "";

        foreach (DataRow item in dataset.Tables["StudentData"].Rows)
        {
            sqlText += " INSERT INTO Attendance(SIGStudentID, ActivityId, Attendance) VALUES(@SIGStudentID,@ActivityId,@Attendance); ";
            command.Parameters.Clear();
            command.Parameters.Add("@SIGStudentID", SqlDbType.Int);
            command.Parameters["@SIGStudentID"].Value = Convert.ToInt32(item["SIGStudentID"]);
            command.Parameters.Add("@ActivityId", SqlDbType.Int);
            command.Parameters["@ActivityId"].Value = num;
            command.Parameters.Add("@Attendance", SqlDbType.Bit);
            command.Parameters["@Attendance"].Value = 0;



        }
        numofRecordsAffected = command.ExecuteNonQuery();

        connect.Close();

        return numofRecordsAffected;
    }

当您放置代码时,
numofrecordsafected=command.ExecuteNonQuery()在您的
foreach
外侧。 它只执行一次。由于此代码是向表中插入数据的实际语句,因此它将只插入一行

试着把你的代码

numofrecordsafected=command.ExecuteNonQuery()

foreach
块内。然后它将插入每一行

    public int InsertAttendance(int num)
    {
    SqlDataAdapter adapter = new SqlDataAdapter();
    SqlCommand command = new SqlCommand();
    SqlConnection connect = new SqlConnection();
    DataSet dataset = new DataSet();
    String sqlText = "SELECT * FROM Student";
    connect.ConnectionString = "Data Source=TECKISTTLE; Initial Catalog=Assignment;    Integrated Security=True";
    command.Connection = connect;
    command.CommandText = sqlText;

    int numofRecordsAffected = 0;

    adapter.SelectCommand = command;
    connect.Open();
    adapter.Fill(dataset, "StudentData");
    sqlText = "";
    numofRecordsAffected = 0;
    sqlText = "INSERT INTO Attendance(SIGStudentID, ActivityId, Attendance) VALUES(@SIGStudentID,@ActivityId,@Attendance); ";
    command.CommandText = sqlText;
    foreach (DataRow item in dataset.Tables["StudentData"].Rows)
    {
        command.Parameters.Clear();
        command.Parameters.AddWithValue("@SIGStudentID", Convert.ToInt32(item["SIGStudentID"]);
        command.Parameters.AddWithValue("@ActivityId", num);
        command.Parameters.AddWithValue("@Attendance", 0);

        numofRecordsAffected += command.ExecuteNonQuery();

    }


    connect.Close();

    return numofRecordsAffected;
}

通过使用循环,您可能会使其变得有点过于复杂,您可以执行以下操作:

"INSERT INTO Attendance(SIGStudentID, ActivityId, Attendance) select SIGStudentID, " + num + " as ActivityId, 0 as Attendance from Student;"
参考:


您使用的是哪个版本的SQL Server?我使用的是Microsoft SQL Server Management Studio 2012,这不是ASP经典版(仅适用于VBA代码)-我想您的意思是
ASP.net
而不是考勤表无法从上述代码接收任何记录。有什么我应该注意的吗?我已经在我的答案中修改了你的代码,看看它是否有效。谢谢,接受我的答案并投票表示感谢。需要15个声誉。我会建立好的,但因为这是你的问题,你可以接受答案,即使你没有声誉。