написание обновленного SQL-запроса с использованием адаптера данных с функцией множителя - PullRequest
0 голосов
/ 08 марта 2011

У меня есть приложение для Windows, использующее c #.Я использую таблицу продуктов Northwind, и мне нужно обновить все цены за единицу на тот же процент.Я знаю, как написать это в запросе SELECT, но у меня возникли проблемы с тем, как написать обновление, используя оператор умножения и параметры sql, а также класс формы запроса UPDATE для моего уровня доступа к данным, и это отображается в запросе SQL, но у меня его нетв правильном месте, потому что я получаю ноль.Может кто-нибудь помочь мне с тем, как написать строку обновления?Вот фрагмент той части SQL, с которой я борюсь:

//Update using SQL string
productDataAdapter.UpdateCommand.CommandText =
    "UPDATE Products SET " +
    "UnitPrice * " + multiplier   = "@UnitPrice";

holdParm = new SqlParameter();
holdParm.ParameterName = "@UnitPrice";
holdParm.SourceColumn = "UnitPrice";
productDataAdapter.UpdateCommand.Parameters.Add(holdParm);    

//Open connection
productDataAdapter.InsertCommand.Connection.Open();

//usd data adapter to update the Products table
rowCount = productDataAdapter.Update(productsDataSet, "Products");

return rowCount;      

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Как насчет просто выполнить запрос?

decimal factor = 1.1; // for example...
string sql = "UPDATE products set unitPrice = unitprice*" + factor.ToString();

Затем используйте объект dbCommand, установите его следующим образом:

IDbCommand cmd = Database.CreateCommand(sql, CommandType.Text);
cmd.ExecuteReader();

Таким образом, вы запускаете ОБНОВЛЕНИЕ и только обновление, и вы знаете, что оно делает и когда это происходит. Конечно, отфильтруйте это ОБНОВЛЕНИЕ по мере необходимости, чтобы обновлять только то, что вы хотите обновить.

0 голосов
/ 08 марта 2011

Вы используете DataAdapter нестандартным способом. Я бы посоветовал вам рассмотреть два разных подхода:

  1. Сделайте обновление ваших данных в памяти; другими словами: обновите строки таблицы Products в вашем наборе данных, используя код C #. После внесения изменений вы можете сохранить их обратно в базу данных с помощью DataAdapter (или TableAdapter), который настроен стандартным образом, чтобы он просто передавал данные в набор данных в памяти и из него.
  2. Используйте TSQL для обновления данных непосредственно перед загрузкой в ​​DataSet или после сохранения их из DataSet в базу данных. В этом случае вы будете использовать либо адаптер таблицы запросов, либо объект SqlClient.SqlCommand.

Я не вижу никакого преимущества в преобразовании, пока вы сохраняете данные обратно в базу данных с помощью DataAdapter. Один недостаток, который я вижу в этом подходе, заключается в том, что программистам, привыкшим к использованию DataAdatpers, просто запутать и сохранить данные.

...