|
|
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Даже не знаю в какой это раздел... Приложение на C#(asp.net) + MS SQL. Есть форма на которой создаются новые таски. В первую таблицу - данные добавляются один раз, а во вторую из текстового файла(по 1 записи в строку). Так вот чтобы связать эти данные, мне как-то нужно получить TestID, чтобы потом туда вложить данные из файла. Скажем есть таблицы test - ID - Text - Comments test1 - ID - TestID - MainText Так вот суть вставить данные в первую таблицу: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Для того чтобы вставить данные во вторую таблицу мне где-то нужно взять TestID, как его получить? С БД я работаю через DBManager, Info, Adapter. Киньте пожалуйста примерчиком или как здесь быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 17:29:43 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Так вы определитесь где вы хотите TestID получить , в хранимке или коде серверной части приложения и правильно бы было так наверное Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 17:39:39 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Andrey1306Так вы определитесь где вы хотите TestID получить , в хранимке или коде серверной части приложения и правильно бы было так наверное Код: sql 1. 2. По идее наверное всетаки же он мне нужен в коде... т.к. мне придется вызывать вторую хранимую процедуру несколько раз и из первой это сделать не получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 17:41:30 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
qsm, Не совсем понимаю что Вы пытаетесь сделать , но можно вызвать из одной ХП на другую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 17:44:48 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
output ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 17:56:32 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Andrey1306, А как по вашему из файла ну например в 1000 строк заполнить вторую таблицу и подставить данные из первой (я знаю что можно вызвать - но тогда мне придется первую хранимку вызвать постоянно - что повлечет за собой дублирование данных либо нагрузку), например: Представьте форма: - Поле 1 - текстовое поле (поле Text) - таблица test - Поле 2 - большое текстовое поле (поле Comments) - таблица test - Поле 3 файл - со вставкой данных построчно в другую таблицу (поле MainText) - таблица test1 Таблица 1 (test) test - ID - Text - Comments test - 1 - Текст 1 - Comments 1 Таблица 2 (test1): test1 - ID - TestID - MainText test1 - 1 - 1 - Maintext1 test1 - 2 - 1 - Maintext2 test1 - 3 - 1 - Maintext3 Так вот в таблицу 3 данные должны добавятся из файла... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 18:05:29 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
qsm, Вам наврное в форум по СКЛ нужно. Тяжеловато как в конце рабочего дня гадать , что есть таблица 1 и почему нельзя данные вставить в таблицу 2 из файла. 1. откуда данные попадают в таблицу 1 2. Как связаны между собой 2 таблицы. Та и вообще какая то задача странная у Вас, данные из текствого файла можно легко выбрать простым запросом типа и потом сделать масовый инсерт в таблицу скл, и не парится с файлом. Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 18:29:10 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Andrey1306qsm, Вам наврное в форум по СКЛ нужно. Тяжеловато как в конце рабочего дня гадать , что есть таблица 1 и почему нельзя данные вставить в таблицу 2 из файла. 1. откуда данные попадают в таблицу 1 Из той же формы, что и во вторую. Andrey13062. Как связаны между собой 2 таблицы. Ни как. Связка на уровне по ID - test: ID = test1: TestID . И то эта связка руками через запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 03:10:27 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
qsm, откройте для себя то, что в T-SQL есть RETURN и почитайте документацию по SCOPE_IDENTITY, тогда станет понятно, почему получаете NULL :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В коде приложения на C# создаёте команду с CommandText = TaskModule_Insert, CommanType = CommanType.StoredProcedure, и тремя параметрами: первые два - это ваши @pText и @pComments, третьему параметру указываете ParameterDirection.ReturnValue. Ели что делать далее не ясно, то идёте в Google с запросом: "c# parameterdirection.returnvalue". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 09:13:22 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Или вообще сразу идите в Google с запросом "c# parameterdirection.returnvalue", там первые два результата как раз по Вашей теме. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 09:14:32 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
skyANAqsm, откройте для себя то, что в T-SQL есть RETURN и почитайте документацию по SCOPE_IDENTITY, тогда станет понятно, почему получаете NULL :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В коде приложения на C# создаёте команду с CommandText = TaskModule_Insert, CommanType = CommanType.StoredProcedure, и тремя параметрами: первые два - это ваши @pText и @pComments, третьему параметру указываете ParameterDirection.ReturnValue. Ели что делать далее не ясно, то идёте в Google с запросом: "c# parameterdirection.returnvalue". :) Ну у меня в принципе в адаптере к этой таблице: protected override SqlCommand CreateInsertCommand(SqlConnection connection, SqlTransaction transaction) { var result = new SqlCommand(); result.Connection = connection; result.Transaction = transaction; result.CommandText = "TaskModule_Insert"; result.CommandType = CommandType.StoredProcedure; result.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int, 4, ParameterDirection.ReturnValue, 10, 0, null, DataRowVersion.Current, false, null, "", "", "")); result.Parameters.Add(new SqlParameter("@pText", SqlDbType.NVarChar)); result.Parameters.Add(new SqlParameter("@pComments", SqlDbType.Int)); return result; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 13:11:48 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
skyANAqsm, откройте для себя то, что в T-SQL есть RETURN и почитайте документацию по SCOPE_IDENTITY, тогда станет понятно, почему получаете NULL :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В коде приложения на C# создаёте команду с CommandText = TaskModule_Insert, CommanType = CommanType.StoredProcedure, и тремя параметрами: первые два - это ваши @pText и @pComments, третьему параметру указываете ParameterDirection.ReturnValue. Ели что делать далее не ясно, то идёте в Google с запросом: "c# parameterdirection.returnvalue". :) Ну у меня в принципе в адаптере к этой таблице: protected override SqlCommand CreateInsertCommand(SqlConnection connection, SqlTransaction transaction) { var result = new SqlCommand(); result.Connection = connection; result.Transaction = transaction; result.CommandText = "TaskModule_Insert"; result.CommandType = CommandType.StoredProcedure; result.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int, 4, ParameterDirection.ReturnValue, 10, 0, null, DataRowVersion.Current, false, null, "", "", "")); result.Parameters.Add(new SqlParameter("@pText", SqlDbType.NVarChar)); result.Parameters.Add(new SqlParameter("@pComments", SqlDbType.Int)); return result; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 13:12:59 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Что то типа так? Код: c# 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 13:21:42 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
qsm, По моему это начало только , Вы команду создали а где выполнение ? Ваш вариант вроде бы , var id = result.ExecuteScalar(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 13:53:28 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Разумеется, что-то типа такого? Andrey1306qsm, По моему это начало только , Вы команду создали а где выполнение ? Ваш вариант вроде бы , var id = result.ExecuteScalar(); Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. в Managere: Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 14:17:14 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Или там нужно как при Select читать возвращаемые параметры using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { int TestId = reader.GetInt32(0); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 14:19:51 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
qsm, command.ExecuteNonQuery(); и var id = command.ExecuteScalar(); разницу замечаете ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 14:24:13 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
Andrey1306qsm, command.ExecuteNonQuery(); и var id = command.ExecuteScalar(); разницу замечаете ? Ну да понял, но логика в принципе остается такой? Потом мне достаточно создать новую SqlCommand и вызвать хранимую процедуру на вставку данных но уже для второй таблицы передавая туда info.TestID и дополнить функцию команды на выполнение(public int Insert) параметрами на вставку для второй таблицы... или проще вернуть значения в эту инфошку(info.TestID), описать новый адаптер и инфокласс для второй таблицы передать туда info.TestID ну и все? и вызывать уже в контроле: _manager.InsertTaskModule(_taskone); _manager1.InsertTask1Module(_taskone1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 16:14:48 |
|
||
|
Вставка данных в две таблицы с помощью хранимки...
|
|||
|---|---|---|---|
|
#18+
qsmПотом мне достаточно создать новую SqlCommand и вызвать хранимую процедуру на вставку данных но уже для второй таблицы передавая туда info.TestID и дополнить функцию команды на выполнение(public int Insert) параметрами на вставку для второй таблицы... или проще вернуть значения в эту инфошку(info.TestID), описать новый адаптер и инфокласс для второй таблицы передать туда info.TestID ну и все?че, уже пьём? про output почитать не ты пожелал... нуифигсним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 16:51:42 |
|
||
|
|

start [/forum/topic.php?fid=18&fpage=141&tid=1360041]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
306ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 638ms |

| 0 / 0 |
