2014-02-21 3 views
0

Я пытаюсь выполнить свой последний проект для BSc, потому что я пытаюсь создать систему управления тренажерами на C# и sql server2012. У меня есть таблицыКак вставить три таблицы сразу в sql-сервере 2012

(instructors,salary,members(students), fees, schedules) 

При регистрации нового члена я хочу, чтобы вставить в 3 таблицы (членов, сборов, графики) сразу, но я понятия не имею, как это сделать, я действительно хочу помочь от вас людей к показать простой выход.
Какой запрос я должен писать для ввода во все три таблицы одновременно. этот URL-адрес моей формы C#, пожалуйста, проверьте его.

http://s502.photobucket.com/user/ajmalajmal/media/membersdesign_zps83fd57c5.png.html?filters[user]=13936469 фильтры [последнее] = 1 & рода = 1 & о = 1

это мои таблицы в SQL SERVER

http://s502.photobucket.com/user/ajmalajmal/media/tablessssssssssssss_zps14a56a9d.png.html?filters[user]=13936469 фильтры [недавнее] = 1 & sort = 1 & o = 0

+0

Пожалуйста, попробуйте разместить эти изображения в вашем посте. Таким образом, читателям вашего сообщения было бы легче помочь вам. – Christos

+0

Я не думаю, что у него достаточно репутации. – Jonesopolis

+0

Вам понадобится запрос на вставку для каждой таблицы. Мое предложение - написать хранимую процедуру с этими запросами и вызвать ее из вашего .net-приложения.Кстати, добавление тегов для трех разных движков базы данных, когда вы используете только один, делает ваш вопрос неоднозначным. Если вы хотите быть программистом, вы должны понимать, насколько это плохо. –

ответ

2

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

Таким образом, в обработчик событий SaveButton_Click вы делаете:

BEGIN TRANSACTION 

INSERT INTO members 
(id, firstname, etc.) 
VALUES (tbMemberID.text, tbFirstName.text, etc) 

INSERT INTO fees 
(id, amount, etc.) 
VALUES (tbFeeID.text, tbAmount.text, etc) 

INSERT INTO schedule 
(id, session) 
VALUES (tbScheduleID.text, tbSession.text) 

COMMIT TRANSACTION 
GO 
+0

спасибо david за ваш ответ, он работает на сервере sql, но теперь я пытаюсь выяснить способ применения его в C#, в моей форме C# у меня есть sqlconnection и insertcommand и т. д., но каков синтаксис транзакции. если u может дать простой пример для C#, а это будет здорово. tnx – user3026782

+0

в этом случае вы можете использовать SqlTransaction. transaction.BeginTransaction(); Затем вставьте свои вещи. Затем transaction.Commit(); – David

+0

Краткое решение, сгенерируйте идентификатор с помощью Guid.NewGuid(), затем вставьте его в sql с помощью SqlCommand.Parameters.Add() См. Http://msdn.microsoft.com/en-us/library/system.data.sqlclient .sqlcommand.parameters (v = vs.110) .aspx – David

0

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

0

Хотя я бы не рекомендовал, но Триггеры может быть удобно для таких ситуаций.

1

Вы можете создать вид объединения данных из этих трех таблиц , а затем использовать вместо триггера для вставки данных в эти таблицы с одной вставкой заявления.

Создать три таблицы

CREATE TABLE TableA(
[PrimaryKey] [int] IDENTITY(1,1) NOT NULL, 
[FieldA] [nvarchar](50) NOT NULL, 
CONSTRAINT [PK_TableA] PRIMARY KEY CLUSTERED ([PrimaryKey] ASC) 
) ON [PRIMARY] 

CREATE TABLE TableB(
[PrimaryKey] [int] IDENTITY(1,1) NOT NULL, 
[FieldB] [nvarchar](50) NULL, 
CONSTRAINT [PK_TableB] PRIMARY KEY CLUSTERED ([PrimaryKey] ASC) 
) ON [PRIMARY] 

CREATE TABLE TableC(
[PrimaryKey] [int] IDENTITY(1,1) NOT NULL, 
[FieldC] [nchar](10) NOT NULL, 
CONSTRAINT [PK_TableC] PRIMARY KEY CLUSTERED ([PrimaryKey] ASC) 
) ON [PRIMARY] 

Создать вид

CREATE VIEW ThreeTablesView 
AS SELECT dbo.TableA.FieldA, dbo.TableB.FieldB, dbo.TableC.FieldC 
FROM dbo.TableA 
INNER JOIN dbo.TableB ON dbo.TableA.PrimaryKey = dbo.TableB.PrimaryKey 
INNER JOIN dbo.TableC ON dbo.TableA.PrimaryKey = dbo.TableC.PrimaryKey 

Создать вместо триггера

CREATE TRIGGER ThreeTablesView_InsertTrigger 
ON [dbo].[ThreeTablesView] 
INSTEAD OF INSERT 
AS 
BEGIN 
INSERT INTO TableA (FieldA) SELECT i.FieldA FROM INSERTED i; 
INSERT INTO TableB (FieldB) SELECT i.FieldB FROM INSERTED i; 
INSERT INTO TableC (FieldC) SELECT i.FieldC FROM INSERTED i; 
END 

Вставка данных в три таблицы с одного вставки заявления

insert into ThreeTablesView (FieldA, FieldB, FieldC) values (N'aa', N'bb', N'cc'); 
+0

благодарит много дорогих джоннино, а другие люди требуют времени, чтобы ответить на мой вопрос. этот код выглядит великолепно, но мне кажется очень сложно применить его через C# на сервере sql, я буду google. в любом случае я получил много идей от вас, людей. Большое спасибо – user3026782

+0

Мне сложно, но в целом вам просто нужно добавить представление, которое действует как виртуальная таблица. Чтобы поддерживать операции вставки, обновления и удаления в этом представлении, вам нужно использовать вместо триггеров. Это все. – johnnyno

+0

В любом случае, если ваше решение не требует ** вставки в отдельную таблицу **. В зависимости от того, что вам нужно, например, инкапсулировать логику вставки или сделать 3 атома вставки, вы также можете использовать транзакцию или хранимую процедуру (необязательно с транзакцией). – johnnyno

Смежные вопросы