Member 13308799 Ответов: 3

Я хочу вставить проверенное значение из gridview и некоторое значение из сеанса в новую таблицу данных, но возникает ошибка,


Я попытался присвоить значение из GridView в и сеанс в переменную, а затем передать их в DBConnect.cs, чтобы вставить в новый таблица данных, но есть ошибка, когда я запускаю код.

Что я уже пробовал:

protected void btSave_Click(object sender, EventArgs e)
        {
            Students student = (Students)Session["student"];
            foreach (GridViewRow row in gvGetCourse.Rows)
            {
                for (int i = 0; i < gvGetCourse.Rows.Count-1; i++)
                {

                    int StudId = student.StudentID; // Exception occur here!!
                    int CourId = Convert.ToInt32(gvGetCourse.Rows[i].Cells[0].Text);
                    DateTime now = DateTime.Now;
                    int Courfee = Convert.ToInt32(gvGetCourse.Rows[i].Cells[2].Text);
                    gvGetCourse.DataSource = DbConnect.ShowCourse(StudId,CourId, now, Courfee);
         
                }
            }
        }

// the code below is in a different class

         public static DataTable ShowCourse(int StudId, int CourId, DateTime now, int Courfee)
        {
            DataTable dt = new DataTable();
            string query = "Insert Into CourseTaken" + "(StudentID,CourseID,Date,AtmPaid)values(@StudId,@CourID,@now,@Courfee)";
            try
            {

                cn.Open();
                SqlCommand Cmd = new SqlCommand(query, cn);
                Cmd.Parameters.AddWithValue("@StudID", StudId );
                Cmd.Parameters.AddWithValue("@CourID", CourId);
                Cmd.Parameters.AddWithValue("@now", now);
                Cmd.Parameters.AddWithValue("@Courfee", Courfee);
                Cmd.ExecuteNonQuery();

            }
            catch (Exception E)
            {
                throw new Exception("Database Exception: " + E.Message);
            }
            finally
            {
                cn.Close();
            }
            return dt;
        }

RickZeeland

Мне кажется, что переменная сеанса "студент" неверна, см.: https://msdn.microsoft.com/en-us/library/ms178581.aspx

Patrice T

И у вас есть план, чтобы сказать нам, какое сообщение об ошибке и положение ?

3 Ответов

Рейтинг:
2

Karthik_Mahalingam

Кажется, что session является null, Проверка на нулевое значение перед доступом к его members

Students student = (Students)Session["student"];
           if(student != null)
            foreach (GridViewRow row in gvGetCourse.Rows)
            {
                for (int i = 0; i < gvGetCourse.Rows.Count-1; i++)
                {
 
                    int StudId = student.StudentID; // Exception occur here!!
                    int CourId = Convert.ToInt32(gvGetCourse.Rows[i].Cells[0].Text);
                    DateTime now = DateTime.Now;
                    int Courfee = Convert.ToInt32(gvGetCourse.Rows[i].Cells[2].Text);
                    gvGetCourse.DataSource = DbConnect.ShowCourse(StudId,CourId, now, Courfee);
         
                }
            }


Рейтинг:
1

Fatma Zayed

Во-первых: где вы установили переменную сеанса

Session["student"]

неправильно, как вы сказали, означает, что он равен нулю или у него нет правильных данных.
Второй:
в
gvGetCourse.DataSource = DbConnect.ShowCourse(StudId,CourId, now, Courfee);

почему вы вызываете каждый с каждой строкой, если хотите получить / вернуть обновленные данные
получите его после обновления целых строк в конце цикла for вызовите функцию, чтобы получить новые данные из вашей базы данных.


Рейтинг:
0

Member 13308799

он равен нулю после того, как я запускаю код

код, который я опубликовал, находится в отдельном классе,
Я использую

gvGetCourse.DataSource = DbConnect.ShowCourse(StudId,CourId, now, Courfee);

передать переменную во второй код для вставки в таблицу CourseTaken


Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
и удалите это не решение.