选择并插入sql数据库

狮子

知名会员
已加入
2018年11月29日
留言内容
52
编程经验
Beginner
你好
我对C#非常陌生,并且在学习过程中不断学习
我在写学生应用
所以我要完成的工作如下:
我有一张桌子,桌子上有与主题链接的模块。因此,当学生注册一门学科时,我希望将模块自动写入StudyHistory表。
我已经尝试过以下脚本,但我不确定这不是最好的脚本,但是我每天都会学到更多

任何历史将不胜感激
C#:
                conn = new SqlConnection(cs.DBConn);
                conn.Open();
                string querySelectedStudentModule = "select ModuleNumber,ModuleName from Modules where fkSubjectNumber='" + studentCourseSubject + "' and Archived = '0'";
                SqlCommand cmdSelectedStudentModule = new SqlCommand(querySelectedStudentModule);
                cmdSelectedStudentModule.Connection = conn;
               
                SqlDataReader rdrSelectedStudentModule = cmdSelectedStudentModule.ExecuteReader();

                ////// Loop through the result set
                while (rdrSelectedStudentModule.Read())
                {
                    studentModule = rdrSelectedStudentModule["ModuleNumber"].ToString();
                    studentModuleName = rdrSelectedStudentModule["ModuleName"].ToString();

                   
                   
                    int incrementStudentNumber = subjectPaymentNumber + 1;
                    string convertedNumber = incrementStudentNumber.ToString().PadLeft(6, '0');
                    string completeHistoryNumber = "HIS" + convertedNumber;

                    string queryInsertStudyHistory = "insert into StudyHistory (StudyHistoryNumber,StudentNumber,CourseNumber,CourseName,SubjectNumber,SubjectName,ModuleNumber,ModuleName) " +
                                "VALUES (@StudyHistoryNumber,@StudentNumber,@CourseNumber,@CourseName,@SubjectNumber,@SubjectName,@ModuleNumber,@ModuleName)";

                    SqlCommand cmdInsertStudyHistory = new SqlCommand(queryInsertStudyHistory);
                    cmdInsertStudyHistory.Connection = conn;

                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@StudyHistoryNumber", System.Data.SqlDbType.NVarChar, 50, "StudyHistoryNumber"));
                    cmdInsertStudyHistory.Parameters["@StudyHistoryNumber"].Value = completeHistoryNumber;
                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@StudentNumber", System.Data.SqlDbType.NVarChar, 50, "StudentNumber"));
                    cmdInsertStudyHistory.Parameters["@StudentNumber"].Value = studentNumberUpdater;
                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@CourseNumber", System.Data.SqlDbType.NVarChar, 50, "CourseNumber"));
                    cmdInsertStudyHistory.Parameters["@CourseNumber"].Value = selectedStudentSubject;
                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@CourseName", System.Data.SqlDbType.NVarChar, 250, "CourseName"));
                    cmdInsertStudyHistory.Parameters["@CourseName"].Value = studentSelectedCourseName;
                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@SubjectNumber", System.Data.SqlDbType.NVarChar, 50, "SubjectNumber"));
                    cmdInsertStudyHistory.Parameters["@SubjectNumber"].Value = studentCourseSubject;
                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@SubjectName", System.Data.SqlDbType.NVarChar, 250, "SubjectName"));
                    cmdInsertStudyHistory.Parameters["@SubjectName"].Value = studentSelectedSubjectName;
                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@ModuleNumber", System.Data.SqlDbType.NVarChar, 50, "ModuleNumber"));
                    cmdInsertStudyHistory.Parameters["@ModuleNumber"].Value = studentModule;
                    cmdInsertStudyHistory.Parameters.Add(new SqlParameter("@ModuleName", System.Data.SqlDbType.NVarChar, 250, "ModuleName"));
                    cmdInsertStudyHistory.Parameters["@ModuleName"].Value = studentModuleName;

                    cmdInsertStudyHistory.ExecuteReader();

                    // close reader
                   



                }
               
                rdrSelectedStudentModule.Close();
                conn.Close();
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
供以后参考,请不要在代码的第一行和其他任何行中删掉前导空格。这只会使代码更难阅读。如果您不打算将其剥离,请不要从任何一个剥离,这样缩进是一致的。更好的是,将其从所有行中剥离。选择代码时按住Alt键可以选择任意矩形区域,这样就可以不选择前导空白。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
无需先检索数据,然后再单独插入。您可以在一个SQL语句中同时执行这两个操作,只需调用ExecuteNonQuery即可执行该语句。


与其他SELECT语句一样,如果要在结果集的每一行中获取特定值,则可以使用值而不是列。在您的情况下,应该是StudentNumber之类的东西,您应该通过参数来输入。
 

狮子

知名会员
已加入
2018年11月29日
留言内容
52
编程经验
Beginner
感谢您的协助。
如果我将select语句中的变量和数据组合在一起,是否可以正常工作?
七个变量中有五个来自变量,只有ModuleNumber和ModuleName来自select语句。
我只想知道是否可以使用Insert .... select语句来完成这两个操作。

抱歉,这对我来说是新手,我做了很多php ... mysql,它不如C#严格,导致我需要学习的草率代码

我真的很喜欢C#的学习曲线
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
感谢您的协助。
如果我将select语句中的变量和数据组合在一起,是否可以正常工作?
七个变量中有五个来自变量,只有ModuleNumber和ModuleName来自select语句。
我只想知道是否可以使用Insert .... select语句来完成这两个操作。
是的。我之前的帖子中的最后两个句子专门针对该问题。
 
最佳 底部