Проблема с кодом обновления ADO.NET - PullRequest
1 голос
/ 21 июля 2011

Может ли кто-нибудь быстро взглянуть на мой код ado.net?Я пытаюсь обновить строку из набора данных, но она просто не работает.Я пропускаю какой-то элементарный фрагмент кода, и он просто ускользает от меня.Я проверил, что DataRow действительно содержит правильные данные, поэтому сама строка является точной.

Большое спасибо заранее.

 try
            {
                //basic ado.net objects
                SqlDataAdapter dbAdapter = null;
                DataSet returnDS2 = new DataSet();

                //a new sql connection
                SqlConnection myConn = new SqlConnection();
                myConn.ConnectionString = "Server=myserver.mydomain.com;"
                     + "Database=mydatabase;"
                     + "User ID=myuserid;"
                     + "Password=mypassword;"
                     + "Trusted_Connection=True;";

                //the sqlQuery
                string sqlQuery = "select * from AVLUpdateMessages WHERE ID = 21";

                //another ado.net object for the command
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = myConn;
                cmd.CommandText = sqlQuery;

                //open the connection, execute the SQL statement and then close the connection.
                myConn.Open();

                //instantiate and fill the sqldataadapter
                dbAdapter = new SqlDataAdapter(cmd);
                dbAdapter.Fill(returnDS2, @"AVLUpdateMessages");

                //loop through all of the rows; I have verified that the rows are correct and returns the correct data from the db
                for (int i = 0; i <= returnDS2.Tables[0].Rows.Count - 1; i++)
                {
                    DataRow row = returnDS2.Tables[0].Rows[i];
                    row.BeginEdit();
                    row["UpdatedText"] = @"This is a test...";
                    row.EndEdit();
                }

                //let's accept the changes
                dbAdapter.Update(returnDS2, "AVLUpdateMessages");
                returnDS2.AcceptChanges();

                myConn.Close();

            }  

Ответы [ 3 ]

1 голос
/ 21 июля 2011

Я думаю, вам нужен запрос на обновление в вашем адаптере данных. Я знаю, это отстой ... В качестве альтернативы вы можете использовать класс CommandBuilder для автоматической генерации запросов для операций CRUD.

пример по адресу: http://www.programmersheaven.com/2/FAQ-ADONET-CommandBuilder-Prepare-Dataset

0 голосов
/ 19 августа 2013

Подождите, почему бы не что-то вроде

update AVLUpdateMessages set UpdatedText = 'This is a test...' where id = 21

Если вы просматриваете все строки таблицы для обновления по одной за раз, вы, вероятно, делаете это неправильно.SQL твой друг.

0 голосов
/ 21 июля 2011

Вы можете использовать SqlCommandBuilder, чтобы помочь. После вызова Fill добавьте следующий оператор. Это свяжет компоновщик команд с адаптером данных и (если имеется первичный ключ) должен сгенерировать оператор обновления для вас. Обратите внимание, что за сборщиком команд стоят некоторые расходы. Возможно, он не очень похож на все остальное, но включает в себя поиск информации о схеме (для получения информации о первичном ключе, именах полей, типах полей и т. Д.) Для таблицы и генерации операторов INSERT, DELETE и UPDATE, включающих все поля в стол.

SqlCommandBuilder cb = new SqlCommandBuilder(dbAdapter);
...