В моем приложении ASP. NET мне нужно сделать что-то вроде этого: сначала получить данные от пользователя, затем вставить эти данные в SQL таблицу базы данных сервера, затем получить значение ID
из этой таблицы (которая автоинкрементна), а затем использовать ее в другой вставке в другую таблицу.
Теперь я уже выяснил, что для этого мне нужно использовать T- SQL OUTPUT
пункт. Однако, когда я пытаюсь сделать это, я получаю эту ошибку:
Я пытался следовать советам из этих сообщений: Получить выходной параметр значение в ADO. NET и Использование SQL Вывод хранимой процедуры на сервере в asp. net c#, но я не могу заставить его работать.
Я не использую хранимую процедуру, а вместо этого единственный оператор SQL. Вот оно:
INSERT INTO BS_product_sets (User_id, Set_name, Set_id, Products_count)
OUTPUT inserted.ID INTO @NEWID
VALUES (@UID, @SNAME, @SPREFIX, @PCOUNT)
Я также попробовал это:
DECLARE @NEWID int;
INSERT INTO BS_product_sets (User_id, Set_name, Set_id, Products_count)
OUTPUT inserted.ID INTO @NEWID
VALUES (@UID, @SNAME, @SPREFIX, @PCOUNT)
Но тогда это становится еще более странным, потому что я получаю ошибку:
Кто-нибудь из вас знает, как ее решить? Вот остаток моего кода в C#:
public void InsertProductAutoBinds(int user_id, int parameters_count, List<int> cat_ids, List<string> names, List<string> values, string set_name, string set_id)
{
SqlConnection connection = new SqlConnection(DatabaseConstants.ConnectionString);
// Adding set to database
SqlCommand command = new SqlCommand(DatabaseConstants.InsertSet, connection);
command.Parameters.AddWithValue("@UID", user_id);
command.Parameters.AddWithValue("@SNAME", set_name);
command.Parameters.AddWithValue("@SPREFIX", set_id);
command.Parameters.AddWithValue("@PCOUNT", 0);
command.Parameters.Add("@NEWID", SqlDbType.Int).Direction = ParameterDirection.Output;
connection.Open();
command.ExecuteNonQuery();
int new_inserted_id = Convert.ToInt32(command.Parameters["@NEWID"].Value);
connection.Close();
// Adding binds
command = new SqlCommand(DatabaseConstants.InsertAutoBinds1, connection);
command.Parameters.AddWithValue("@UID", user_id);
command.Parameters.AddWithValue("@SID", new_inserted_id);
command.Parameters.AddWithValue("@P1ID", cat_ids[0]);
command.Parameters.AddWithValue("@VN1", names[0]);
command.Parameters.AddWithValue("@VS1", values[0]);
if (parameters_count > 1)
{
command.CommandText = DatabaseConstants.InsertAutoBinds2;
command.Parameters.AddWithValue("@P2ID", cat_ids[1]);
command.Parameters.AddWithValue("@VN2", names[1]);
command.Parameters.AddWithValue("@VS2", values[1]);
}
if (parameters_count > 2)
{
command.CommandText = DatabaseConstants.InsertAutoBinds3;
command.Parameters.AddWithValue("@P3ID", cat_ids[2]);
command.Parameters.AddWithValue("@VN3", names[2]);
command.Parameters.AddWithValue("@VS3", values[2]);
}
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}