Nicholas Ong Ответов: 2

Функция обновления не обновляет базу данных SQL


Я стараюсь много способов обновить список сведений о студентах. Я все еще не могу обновиться до sql-сервера.

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

<pre> protected void gvStudent_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(strConn))
                {
                    conn.Open();
                    string query = "UPDATE Student SET Name=@Name,Photo=@Photo,Course=@Course,EmailAddr=@EmailAddr,Password=@Password,Status=@Status,MentorID=@MentorID WHERE StudentID = @id";
                    SqlCommand cmd = new SqlCommand(query, conn);
                    cmd.Parameters.AddWithValue("@Name", (gvStudent.Rows[e.RowIndex].FindControl("txtName") as TextBox).Text.Trim());
                    cmd.Parameters.AddWithValue("@Photo", (gvStudent.Rows[e.RowIndex].FindControl("txtPhoto") as TextBox).Text.Trim());
                    cmd.Parameters.AddWithValue("@Course", (gvStudent.Rows[e.RowIndex].FindControl("txtCourse") as TextBox).Text.Trim());
                    cmd.Parameters.AddWithValue("@EmailAddr", (gvStudent.Rows[e.RowIndex].FindControl("txtEmail") as TextBox).Text.Trim());
                    cmd.Parameters.AddWithValue("@Password", (gvStudent.Rows[e.RowIndex].FindControl("txtPassword") as TextBox).Text.Trim());
                    cmd.Parameters.AddWithValue("@Status", (gvStudent.Rows[e.RowIndex].FindControl("txtStatus") as TextBox).Text.Trim());
                    cmd.Parameters.AddWithValue("@MentorID", (gvStudent.Rows[e.RowIndex].FindControl("txtMentorID") as TextBox).Text.Trim());
                    cmd.Parameters.AddWithValue("@id", Convert.ToInt32(gvStudent.DataKeys[e.RowIndex].Value.ToString()));
                    cmd.ExecuteNonQuery();
                    gvStudent.EditIndex = -1;
                    getStudentDetails();
                    lblSuccessMessage.Text = "Selected Record Updated";
                    lblErrorMessage.Text = "";
                }
            }
            catch (Exception ex)
            {
                lblSuccessMessage.Text = "";
                lblErrorMessage.Text = ex.Message;
            }
        }

2 Ответов

Рейтинг:
2

Gerry Schmitz

Предполагается, что вы "извлекаете" студента перед попыткой обновления; чтобы доказать:

1) студент существует
2) ваша "строка подключения" работает
3) база данных находится в режиме онлайн
4) ваша логика запроса работает
5) бла-бла


Рейтинг:
0

OriginalGriff

Без ваших данных это невозможно сказать.
Но... у вас есть ваши данные, и у вас есть отладчик. Объедините эти два, и вы должны быть в состоянии сказать.
Поэтому сделайте две вещи.
1) измените эту строку:

cmd.ExecuteNonQuery();
До настоящего времени:
int changed = cmd.ExecuteNonQuery();
и поставьте точку останова.
Когда вы запускаете свое приложение, используйте точку останова, чтобы посмотреть на значение, которое вы передаете SQL в качестве @id параметр. Затем сделайте один шаг по линии и проверьте значение changed - если он равен нулю, то никакие строки не были изменены.

Обычно, когда обновление "ничего не делает" без каких - либо исключений, это происходит потому, что предложение WHERE не соответствует ни одной строке-поэтому, как только вы использовали отладчик, чтобы проверить именно то, что вы передаете (а не то, что вы думаете, что вы передаете), вы можете проверить БД, чтобы выяснить, почему она не соответствует.

Извините, но мы ничего не можем сделать для вас - у нас вообще нет доступа к вашим данным!


Nicholas Ong

Как поставить точку останова на нем?

Vincent Maverick Durano

https://msdn.microsoft.com/en-us/library/y740d9d3.aspx

Nicholas Ong

Ошибка сервера в приложении'/'.
ошибка конфигурации
Описание: во время обработки файла конфигурации, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, ознакомьтесь с конкретными сведениями об ошибке ниже и соответствующим образом измените свой конфигурационный файл.

Сообщение об ошибке синтаксического анализатора: тип поставщика CodeDom "Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" не удалось найти.

Ошибка Источника:


Строка 22: <system.codedom>
Строка 23: <компиляторы>
Строка 24: &ЛТ;компилятор языка="в C#;CS, который используется CSharp" расширение=".в CS"
Строка 25: type="Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Строка 26: warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>

Исходный Файл: C:\Users\admin\Desktop\WEBAss\WEB_Assignment\web.config Линия: 24

Информация о версии: Microsoft .NET Framework версия:4.0.30319; ASP.NET версия:4.7.3056.0

Nicholas Ong

@OriginalGriff может прислать вам всю мою папку?

OriginalGriff

:смех: нет!
Мне все равно от него не будет никакой пользы - без вашей базы данных и тому подобного он не сможет работать.
Попробовать здесь:
https://blogs.msdn.microsoft.com/benjaminperkins/2016/08/01/codedom-provider-type-could-not-be-located/
И если это не поможет попробуйте google:
https://www.google.co.uk/search-что?м=парсер+ошибка+сообщения%3А+о+модели+поставщик+тип+%22Microsoft.Модели&амп;ОК=парсер+ошибка+сообщения%3А+о+модели+поставщик+тип+%22Microsoft.Модели&амп;СКВ=69i57j69i59 хром..&амп;идентификатором источника=хром&т. е.=кодировка UTF-8