#c# #sql-server
#c# #sql-сервер
Вопрос:
У меня есть две таблицы в SQL Server, и у меня есть форма purchaseinvoiceform
. он использует DataGridView
для сохранения нескольких продуктов.
В режиме сохранения это работает хорошо. Но когда я обновляю любой порядок, он обновляет только первую таблицу, которая есть purchaseinvoice
, но не обновляет вторую таблицу purchaseinvoicedetails
. purchaseinvoicedetails
сохраняет несколько продуктов по их ordernumber
. Если у меня есть один элемент в datagridview
, он успешно сохраняется. Теперь, когда я обновляю этот элемент, никаких проблем не возникает. Но когда я добавляю еще один элемент в этом порядке и пытаюсь его обновить, другие элементы не сохраняются.
Запрос на обновление:
SaveOrUpdateProductDetailsOnly("UPDATE [dbo].[PurchaseInvoiceDetails] SET [ProductCode] = @ProductCode ,[ProductName] = @ProductName ,[Box] = @Box,[Quantity] = @Quantity ,[Price] = @Price,[DiscountInPercent] = @DiscountInPercent ,[DiscountAmount] = @DiscountAmount,[Amount] = @Amount WHERE PurchaseInvoiceNo = @PurchaseInvoiceNo");
Комментарии:
1. вы получили какую-либо ошибку? можете ли вы проверить, какой sql выполняется из sql profiler?
2. cmd.ExecuteNonQuery() возвращает целое число с количеством измененных строк. Какое значение вы получаете? Обновление изменит только значения, которые уже есть в базе данных. Если обновление возвращает ноль, это означает, что первичного ключа нет в базе данных, и вам нужно использовать Insert вместо Update. Если вы используете Insert и получаете возвращаемое значение, равное нулю, тогда вам нужно использовать Update.
3. Я использую update для обновления значения, но я не смог добавить новые значения во время обновления.
4. Как вы думаете, почему одна инструкция update обновит несколько таблиц? И я могу сказать, что опубликованный вами код не обновит таблицу PurchaseInvoice. Ваше обновление ссылается на PurchaseInvoiceDetails.
5. он обновляет единственную таблицу ProductDetails. Но если у меня есть 2 элемента в таком порядке, я не могу добавить третий во время обновления.
Ответ №1:
Как насчет этого?
private void btnUpdate_Click(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection("Server=your_server_name;Database=your_database_name;Trusted_Connection=True;"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Courses", con))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
{
SqlCommandBuilder sqlcmd = new SqlCommandBuilder(da);
DataSet ds = new System.Data.DataSet(); // remove this line
da.Update(this.ds, "Courses");
}
}
}
}
}