Обновите запись в одной таблице (gridview) и добавьте ее в другую таблицу

Итак, я имею в виду... Допустим, у нас есть эта таблица с именем "Matched_table":

Date          Game   Client        cost
12-12-2001    Game1  Jonh          200
12-12-2003    Game2  Jonathan      100

Теперь у нас есть другая таблица с именем «NonMatched_table», эта таблица предназначена для записей, в которых нет записей, совпадающих с «именем клиента», также эта таблица позволяет пользователю обновить столбец имени клиента, чтобы сделать запись «запись соответствия» :

   Date      Game      Costumer name     cost
12-05-2001   Game1       Empty           200 
12-05-2001   Game1       Empty           200
12-05-2001   Game1       Empty           200
12-05-2001   Game1       Carl           200   <--- Updated Record: 

При обновлении это должно произойти:

---- "Matched_ table"----

   Date          Game   Client        cost
   12-12-2001    Game1  Jonh          200
   12-12-2003    Game2  Jonathan      100
   12-05-2001    Game1  Carl          200

---- "Несовпадающая_таблица" ---

Date      Game        Costumer name     cost
12-05-2001   Game1       Empty           200 
12-05-2001   Game1       Empty           200
12-05-2001   Game1       Empty           200

Не существует запроса, который делает это или что-то в этом роде? Я делаю в С# этот запрос string query = "UPDATE NonMatched_table SET costumer= @costumer where ID = @Id Insert into Matched_table"; Мне интересно, могу ли я сделать что-то вроде Insert into после или до, а также удалить, чтобы стереть запись

Вы можете выполнить несколько обновлений, удалить и вставить, включив их в хранимую процедуру.

Chetan 28.05.2019 13:52

@ChetanRanpariya Я новичок в asp.net, вы думаете, что это простой способ?

PuppyPoop 28.05.2019 15:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
283
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у вас нет очень конкретных причин для этого, вы можете следовать гораздо более простому подходу:

  • Имейте все записи в одной таблице, например. MyTable со столбцами Date, Game, Client, Cost.
  • Просто используйте SELECT для фильтрации таблицы. Для несовпадающих записей запрос:

    SELECT * FROM MyTable WHERE Client IS NULL

    Для совпадающих записей запрос выглядит следующим образом:

    SELECT * FROM MyTable WHERE Client IS NOT NULL

  • Кроме того, вы можете использовать приведенные выше запросы для создания двух представлений MyTable: одного для совпадающих и одного для несовпадающих записей.

Боюсь, что ваш подход, хотя и возможный, рано или поздно вызовет проблемы с целостностью данных.

ОБНОВИТЬ

Просто для удовольствия вот рабочий образец того, что я предлагаю:

ASPX

<%@ Page Language = "C#" AutoEventWireup = "true" CodeBehind = "WebForm1.aspx.cs" Inherits = "WebApplication3.WebForm1" %>

<!DOCTYPE html>

<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
    <title></title>
</head>
<body>
    <form id = "form1" runat = "server">
        <div>
            <asp:SqlDataSource 
                ID = "SqlDataSourceUnmatched" 
                runat = "server" 
                ConnectionString = "<%$ ConnectionStrings:ConnectionString %>" 
                SelectCommand = "SELECT [Id], [Date], [Game], [Client], [Cost] FROM [MyTable] WHERE ([Client] IS NULL)"
                UpdateCommand = "UPDATE [MyTable] SET [Date]=@Date, [Game]=@Game, [Client]=@Client, [Cost]=@Cost WHERE [Id]=@Id"
                OnUpdating = "SqlDataSourceUnmatched_Updating">
                <UpdateParameters>
                    <asp:Parameter Name = "Id" Type = "Int32"/>
                    <asp:Parameter Name = "Date" Type = "DateTime" />
                    <asp:Parameter Name = "Game" />
                    <asp:Parameter Name = "Client" />
                    <asp:Parameter Name = "Cost" Type = "Int32" />
                </UpdateParameters>
            </asp:SqlDataSource>
            <br />
            <asp:GridView 
                ID = "GridViewUnmatched" 
                runat = "server" 
                AutoGenerateColumns = "False" 
                DataSourceID = "SqlDataSourceUnmatched"
                OnRowUpdated = "GridViewUnmatched_RowUpdated">
                <Columns>
                    <asp:BoundField 
                        DataField = "Id" 
                        HeaderText = "Id"  />
                    <asp:BoundField 
                        DataField = "Date" 
                        HeaderText = "Date"  />
                    <asp:BoundField 
                        DataField = "Game" 
                        HeaderText = "Game" />
                    <asp:BoundField 
                        DataField = "Client" 
                        HeaderText = "Customer Name" />
                    <asp:BoundField 
                        DataField = "Cost" 
                        HeaderText = "Cost" />
                    <asp:CommandField 
                        ButtonType = "Link" 
                        ShowEditButton = "true"
                        ItemStyle-Width = "100" />
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource 
                ID = "SqlDataSourceMatched" 
                runat = "server" 
                ConnectionString = "<%$ ConnectionStrings:ConnectionString %>" 
                SelectCommand = "SELECT [Date], [Game], [Client], [Cost] FROM [MyTable] WHERE ([Client] IS NOT NULL)">
            </asp:SqlDataSource>
            <br />
            <asp:GridView 
                ID = "GridViewMatched" 
                runat = "server" 
                AutoGenerateColumns = "False" 
                DataSourceID = "SqlDataSourceMatched">
                <Columns>
                    <asp:BoundField 
                        DataField = "Date" 
                        HeaderText = "Date"/>
                    <asp:BoundField 
                        DataField = "Game" 
                        HeaderText = "Game" />
                    <asp:BoundField 
                        DataField = "Client" 
                        HeaderText = "Client" />
                    <asp:BoundField 
                        DataField = "Cost" 
                        HeaderText = "Cost" />
                </Columns>
                <EmptyDataTemplate>
                    No matched records.
                </EmptyDataTemplate>
            </asp:GridView>
        </div>
    </form>
</body>
</html>

Код позади

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void GridViewUnmatched_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        GridViewMatched.DataBind();
    }

    protected void SqlDataSourceUnmatched_Updating(object sender, SqlDataSourceCommandEventArgs e)
    {            
        // assert the record update
        e.Command.Parameters["@Date"].Value = DateTime.Now;
    }
}

Надеюсь, поможет. Я использую Visual Studio 2017, а целевой платформой является .NET 4.6.1.

Я думаю, вы не поняли, что я сказал, или я не ясно дал понять... У меня уже есть таблицы со значениями "match" и "unmatched", я хочу, чтобы иметь возможность делать обновление в не -match table (столбец: имя клиента), и когда я сохраняю значение, полная запись сохраняется в Matched_table

PuppyPoop 28.05.2019 15:12

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

dpant 28.05.2019 15:16

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

PuppyPoop 28.05.2019 15:24

@PuppyPoop Понятно. Я останавливаюсь на достигнутом, так как не могу помочь вам с подходом, основанным на плохом дизайне базы данных. Я могу только сказать, что вам нужно, чтобы все три шага (UPDATE, INSERT, DELETE) выполнялись в одной атомарной операции, чтобы сохранить целостность данных. Одним из решений является объединение всех трех в хранимую процедуру и выполнение этой хранимой процедуры в вашем коде. Обратите внимание, что это не проблема asp.net; это проблема базы данных. Также обратите внимание, что выполнение 3 разных запросов в вашем коде один за другим для обновления и перемещения записи из одной таблицы в другую является идеей плохой.

dpant 28.05.2019 16:03

Может быть, если я сделаю кнопку, которая преобразует все записи с помощью Costumer name not null и вставит в matched_Table после обновления, это сработает.

PuppyPoop 28.05.2019 16:22

@PuppyPoop Просто для полноты и удовольствия я обновил свой ответ, включив в него рабочий образец.

dpant 28.05.2019 19:17

Должен ли я заменить ConnectionString = "<%$ ConnectionStrings:ConnectionString %>" на что?

PuppyPoop 29.05.2019 11:06

Может быть, с моей ConnectionString правильно? в любом случае это всегда выдает мне ошибку, near nvarchar

PuppyPoop 29.05.2019 11:08

Другие вопросы по теме