powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Вставка данных в две таблицы с помощью хранимки...
19 сообщений из 19, страница 1 из 1
Вставка данных в две таблицы с помощью хранимки...
    #37622789
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
Даже не знаю в какой это раздел... Приложение на 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.
ALTER PROCEDURE [dbo].[TaskModule_Insert]
	 @pText NVarChar(MAX) = NULL
	,@pComments Int = NULL
AS 
 BEGIN 
	 SET NOCOUNT ON;
Insert into [TaskModule](Text,Comments) values (@pText,	@pComments)
END
SELECT SCOPE_IDENTITY(); -- а здесь я как бы пытаюсь вернуть идентификатор для вставки данных во вторую таблицу но вообще не срабатывает возвращает значение Null



Для того чтобы вставить данные во вторую таблицу мне где-то нужно взять TestID, как его получить?
С БД я работаю через DBManager, Info, Adapter.

Киньте пожалуйста примерчиком или как здесь быть?
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37622812
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вы определитесь где вы хотите TestID получить , в хранимке или коде серверной части приложения

и правильно бы было так наверное
Код: sql
1.
2.
Declare @TestID int /*или какой тут тип*/
SET @TestID =  SELECT SCOPE_IDENTITY();
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37622819
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
Andrey1306Так вы определитесь где вы хотите TestID получить , в хранимке или коде серверной части приложения

и правильно бы было так наверное
Код: sql
1.
2.
Declare @TestID int /*или какой тут тип*/
SET @TestID =  SELECT SCOPE_IDENTITY();



По идее наверное всетаки же он мне нужен в коде... т.к. мне придется вызывать вторую хранимую процедуру несколько раз и из первой это сделать не получится?
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37622826
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qsm,

Не совсем понимаю что Вы пытаетесь сделать , но можно вызвать из одной ХП на другую.
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37622857
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
output
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37622886
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
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 данные должны добавятся из файла...
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37622931
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qsm,

Вам наврное в форум по СКЛ нужно. Тяжеловато как в конце рабочего дня гадать , что есть таблица 1 и почему нельзя данные вставить в таблицу 2 из файла.

1. откуда данные попадают в таблицу 1
2. Как связаны между собой 2 таблицы.


Та и вообще какая то задача странная у Вас, данные из текствого файла можно легко выбрать простым запросом типа и потом сделать масовый инсерт в таблицу скл, и не парится с файлом.
Код: sql
1.
2.
3.
4.
SELECT * FROM OPENROWSET ('MSDASQL','Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;
Extended Properties=TEXT'
,'select * from input.txt')
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37623401
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
Andrey1306qsm,

Вам наврное в форум по СКЛ нужно. Тяжеловато как в конце рабочего дня гадать , что есть таблица 1 и почему нельзя данные вставить в таблицу 2 из файла.

1. откуда данные попадают в таблицу 1

Из той же формы, что и во вторую.

Andrey13062. Как связаны между собой 2 таблицы.

Ни как. Связка на уровне по ID - test: ID = test1: TestID . И то эта связка руками через запросы.
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37623487
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qsm, откройте для себя то, что в T-SQL есть RETURN и почитайте документацию по SCOPE_IDENTITY, тогда станет понятно, почему получаете NULL :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ALTER PROCEDURE [dbo].[TaskModule_Insert]
  @pText NVarChar(MAX) = NULL,
  @pComments Int = NULL
AS 
BEGIN 
  SET NOCOUNT ON;
  INSERT INTO [TaskModule](Text,Comments) VALUES (@pText, @pComments)
  -- А здесь мы как бы возвращаем идентификатор для вставки данных во вторую таблицу
  RETURN SCOPE_IDENTITY();
END



В коде приложения на C# создаёте команду с CommandText = TaskModule_Insert, CommanType = CommanType.StoredProcedure, и тремя параметрами: первые два - это ваши @pText и @pComments, третьему параметру указываете ParameterDirection.ReturnValue.

Ели что делать далее не ясно, то идёте в Google с запросом: "c# parameterdirection.returnvalue". :)
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37623488
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или вообще сразу идите в Google с запросом "c# parameterdirection.returnvalue", там первые два результата как раз по Вашей теме. :)
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37623886
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
skyANAqsm, откройте для себя то, что в T-SQL есть RETURN и почитайте документацию по SCOPE_IDENTITY, тогда станет понятно, почему получаете NULL :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ALTER PROCEDURE [dbo].[TaskModule_Insert]
  @pText NVarChar(MAX) = NULL,
  @pComments Int = NULL
AS 
BEGIN 
  SET NOCOUNT ON;
  INSERT INTO [TaskModule](Text,Comments) VALUES (@pText, @pComments)
  -- А здесь мы как бы возвращаем идентификатор для вставки данных во вторую таблицу
  RETURN SCOPE_IDENTITY();
END



В коде приложения на 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;
}
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37623889
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
skyANAqsm, откройте для себя то, что в T-SQL есть RETURN и почитайте документацию по SCOPE_IDENTITY, тогда станет понятно, почему получаете NULL :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ALTER PROCEDURE [dbo].[TaskModule_Insert]
  @pText NVarChar(MAX) = NULL,
  @pComments Int = NULL
AS 
BEGIN 
  SET NOCOUNT ON;
  INSERT INTO [TaskModule](Text,Comments) VALUES (@pText, @pComments)
  -- А здесь мы как бы возвращаем идентификатор для вставки данных во вторую таблицу
  RETURN SCOPE_IDENTITY();
END



В коде приложения на 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;
}
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37623906
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
Что то типа так?
Код: c#
1.
2.
3.
4.
5.
           
            result.Parameters.Add(new SqlParameter("@pText", SqlDbType.NVarChar));
            result.Parameters.Add(new SqlParameter("@pComments", SqlDbType.Int));
            result.Parameters.Add(new SqlParameter("@ReturnValue",SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue);
            return result;
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37624002
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qsm,

По моему это начало только , Вы команду создали а где выполнение ?

Ваш вариант вроде бы , var id = result.ExecuteScalar();
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37624086
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
Разумеется, что-то типа такого?
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.
     
      public int Insert(TaskModuleInfo info, SqlConnection connection, SqlTransaction transaction)
        {
            SqlCommand command = GetInsertCommand(connection, transaction);

            if (!String.IsNullOrEmpty(info.Text))
            {
                command.Parameters[1].Value = info.Text;
            }
            else
            {
                command.Parameters[1].Value = DBNull.Value;
            }
            int Comments = info.Comments;
            if (Comments.HasValue)
            {
                command.Parameters[2].Value = info.Comments;
            }
            else
            {
                command.Parameters[2].Value = DBNull.Value;
            }

            int TestID = info.TestID;
            command.Parameters[3].Value = info.TestID;

            if ((command.Transaction == null) && (command.Connection.State.Equals(ConnectionState.Closed)))
            {
                command.Connection.Open();
            }
            try
            {
                command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw new Exception(string.Format(Resource_DbErrors.DbTaskModule_Insert,
                                                  info.Id, ex.Message));
            }
            return 1;
        }



в Managere:
Код: c#
1.
       public int InsertTaskModule(TaskModuleInfo info) { return Insert(info, _commandAdapter.TaskModuleDataAdapter); }
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37624091
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
Или там нужно как при Select читать возвращаемые параметры

using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{

int TestId = reader.GetInt32(0);
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37624109
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qsm,

command.ExecuteNonQuery();

и

var id = command.ExecuteScalar();

разницу замечаете ?
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37624363
qsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
qsm
Гость
Andrey1306qsm,

command.ExecuteNonQuery();

и

var id = command.ExecuteScalar();

разницу замечаете ?

Ну да понял, но логика в принципе остается такой?

Потом мне достаточно создать новую SqlCommand и вызвать хранимую процедуру на вставку данных но уже для второй таблицы передавая туда info.TestID и дополнить функцию команды на выполнение(public int Insert) параметрами на вставку для второй таблицы... или проще вернуть значения в эту инфошку(info.TestID), описать новый адаптер и инфокласс для второй таблицы передать туда info.TestID ну и все? и вызывать уже в контроле: _manager.InsertTaskModule(_taskone); _manager1.InsertTask1Module(_taskone1);
...
Рейтинг: 0 / 0
Вставка данных в две таблицы с помощью хранимки...
    #37624460
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
qsmПотом мне достаточно создать новую SqlCommand и вызвать хранимую процедуру на вставку данных но уже для второй таблицы передавая туда info.TestID и дополнить функцию команды на выполнение(public int Insert) параметрами на вставку для второй таблицы... или проще вернуть значения в эту инфошку(info.TestID), описать новый адаптер и инфокласс для второй таблицы передать туда info.TestID ну и все?че, уже пьём?

про output почитать не ты пожелал... нуифигсним
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Вставка данных в две таблицы с помощью хранимки...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]