Команда обновления в c # не обновляет базу данных - PullRequest
0 голосов
/ 14 августа 2011

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

Попытка обновить строку базы данных.Я написал следующий код, основанный на том, что я нашел на нескольких форумах / сайтах.Код не обновляет базу данных.

После попыток что-либо исправить эту ошибку я обнаружил следующее: база данных будет обновляться правильно, если значение @editFirstName является литералом, как в

* 1006.*

Я также пытался

  UpdateCmd.Parameters["@editFirstName"] = "'" + editFirstNameContent.Text + "'";

, который не работал.

Я также пытался поместить данные TextBox в переменную и использовать переменную:

   string firstNameValue = editFirstNameContent.Text;
   UpdateCmd.Parameters["@editFirstName"] = firstNameValue;

, который не работал.

Поэтому команда UPDATE, по-видимому, обновляет базу данных.Однако, очевидно, строка Parameters.Value не считывает данные в TextBox и поэтому не обновляется с измененным значением.

protected void editCustomerButton_Click(object Sender, EventArgs e)
{
    string connString = WebConfigurationManager.ConnectionStrings["proofreadThePlanetConnectionString"].ConnectionString;
    using (SqlConnection connection = new SqlConnection(connString))
    {
        connection.Open();
        string updateString = "UPDATE tblCustomerInfo SET customerID=@editCustomerID, customerFirstName=@editFirstName, customerLastName=@editLastName, customerEmail=@editEmail WHERE customerID=" + Request.QueryString["EID"];
        SqlCommand UpdateCmd = new SqlCommand(updateString, connection);
        UpdateCmd.Parameters.Add("@editCustomerID", SqlDbType.Int);
        UpdateCmd.Parameters["@editCustomerID"].Value = editCustomerIDContent.Text;
        UpdateCmd.Parameters.Add("@editFirstName", SqlDbType.VarChar, 25);
        UpdateCmd.Parameters["@editFirstName"].Value = editFirstNameContent.Text;
        UpdateCmd.Parameters.Add("@editLastName", SqlDbType.VarChar, 50);
        UpdateCmd.Parameters["@editLastName"].Value = editLastNameContent.Text;
        UpdateCmd.Parameters.Add("@editEmail", SqlDbType.VarChar, 75);
        UpdateCmd.Parameters["@editEmail"].Value = editEmailContent.Text;
        UpdateCmd.ExecuteNonQuery();
    }
}

Ответы [ 3 ]

2 голосов
/ 14 августа 2011

Я не уверен, как MS SQL Server обрабатывает автоматическую фиксацию, но если режим автоматической фиксации не включен, вам нужно будет зафиксировать транзакцию вручную (UpdateCmd.Transaction.Commit).

0 голосов
/ 23 июня 2016

Я бы проверил, что

Request.QueryString["EID"]

действительно содержит правильное значение customerId , так как это может привести к выполнению оператора, но не обновлять данные, если вы пытаетесь обновить несуществующую строку.

Чтобы убедиться, что значения параметров установлены правильно, вы можете попробовать следующий формат:

command.Parameters.Add("@editCustomerID", SqlDbType.Int).Value = editCustomerIDContent.Text;

Как предположил Эш, лучший способ выяснить, что именно происходит, - запустить Profiler для базы данных во время выполнения команды (Примечание. Это может повлиять на производительность и должно выполняться на тестовой / Dev система или нерабочее время)

0 голосов
/ 15 августа 2011

SQL Profiler поставляется вместе с SQL Management Studio. Запустите это во время выполнения вашего кода, чтобы увидеть, какая команда на самом деле выполняется.

Вот руководство по использованию профилировщика.

http://sqlserverpedia.com/wiki/Using_SQL_Server_Profiler

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...