Итак, я имею в виду... Допустим, у нас есть эта таблица с именем "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
после или до, а также удалить, чтобы стереть запись
@ChetanRanpariya Я новичок в asp.net, вы думаете, что это простой способ?
Если у вас нет очень конкретных причин для этого, вы можете следовать гораздо более простому подходу:
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 Ваш вопрос ясен. Я предлагаю вам не нужно несколько таблиц. В одной таблице могут быть как совпадающие, так и несовпадающие значения. Подумай об этом.
Я знаю, что могу, но я не делаю так, чтобы пользователь тоже мог редактировать совпадающие значения, поэтому лучше иметь таблицу с несовпадающими значениями, когда пользователь может ее редактировать, и другие, чтобы увидеть значения, которые уже совпало...
@PuppyPoop Понятно. Я останавливаюсь на достигнутом, так как не могу помочь вам с подходом, основанным на плохом дизайне базы данных. Я могу только сказать, что вам нужно, чтобы все три шага (UPDATE, INSERT, DELETE) выполнялись в одной атомарной операции, чтобы сохранить целостность данных. Одним из решений является объединение всех трех в хранимую процедуру и выполнение этой хранимой процедуры в вашем коде. Обратите внимание, что это не проблема asp.net; это проблема базы данных. Также обратите внимание, что выполнение 3 разных запросов в вашем коде один за другим для обновления и перемещения записи из одной таблицы в другую является идеей плохой.
Может быть, если я сделаю кнопку, которая преобразует все записи с помощью Costumer name not null
и вставит в matched_Table после обновления, это сработает.
@PuppyPoop Просто для полноты и удовольствия я обновил свой ответ, включив в него рабочий образец.
Должен ли я заменить ConnectionString = "<%$ ConnectionStrings:ConnectionString %>"
на что?
Может быть, с моей ConnectionString правильно? в любом случае это всегда выдает мне ошибку, near nvarchar
Вы можете выполнить несколько обновлений, удалить и вставить, включив их в хранимую процедуру.