powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как получить Auto Incerment Value?
12 сообщений из 37, страница 2 из 2
как получить Auto Incerment Value?
    #33036827
Angello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avoda AngelloА почему бы процедуру не использовать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE Procedure ИмяПроцедуры
(
    @Name   nvarchar( 50 ),
    @RecordID int OUTPUT
)
AS
INSERT INTO ИмяТаблицы
(
    Name
)

VALUES
(
    @Name,
)
SELECT
    @RecordID = @@Identity
GO
Или такой вариант тоже не подходит по неизвестным нам соображениям? Если так поделитесь ими ...

подходит. Как мне его считать в VB.NET application?
Добавляете функцию, которая принимает необходимые параметры и возвращает ID в случае успешного добавления записи
Код: plaintext
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.
Public Function ИмяФункции(ByVal Name As String) As Integer
            Dim myConnection As New SqlConnection(connectionString)
            Dim myCommand As New SqlCommand("ИмяПроцедуры", myConnection)

            myCommand.CommandType = CommandType.StoredProcedure

            ' Добавляем параметр в процедуру
            Dim parameterFullName As New SqlParameter("@Name", SqlDbType.NVarChar,  50 )
            parameterFullName.Value = Name
            myCommand.Parameters.Add(parameterFullName)

            Dim RecordID As New SqlParameter("@RecorID", SqlDbType.Int)
            RecordID.Direction = ParameterDirection.Output
            myCommand.Parameters.Add(RecordID)

            Try
                myConnection.Open()
                myCommand.ExecuteNonQuery()
            Catch err As Exception
                ' Ошибка :)
                Return - 1 
            Finally
                If myConnection.State = ConnectionState.Open Then
                    myConnection.Close()
                End If
            End Try
            Return CInt(RecordID.Value)
        End Function
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036851
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лиман Артём Angello
Код: plaintext
1.
    @RecordID = @@Identity

это конечно тоже вариант, только я бы все же советовал использовать вместо @@Identity SCOPE_IDENTITY() так как при инсерте может сработать триггер, который в свою очередь также проведет вставку, соответсвенно @@Identity вернет не наш Identity, а чужой. Эта один из подводных камней при программировании на TSql, так как на момент написания хранимки такого триггреа может и не быть и всё будет работать хорошо. И хорошо еще если мы одни программируем базу, а если коллективная разработка - я добавлю триггер, ты ничего о не знать не будешь, но логика твоей хранимки испортится...

Большое спасибо!
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036854
avoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Angello avoda AngelloА почему бы процедуру не использовать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE Procedure ИмяПроцедуры
(
    @Name   nvarchar( 50 ),
    @RecordID int OUTPUT
)
AS
INSERT INTO ИмяТаблицы
(
    Name
)

VALUES
(
    @Name,
)
SELECT
    @RecordID = @@Identity
GO
Или такой вариант тоже не подходит по неизвестным нам соображениям? Если так поделитесь ими ...

подходит. Как мне его считать в VB.NET application?
Добавляете функцию, которая принимает необходимые параметры и возвращает ID в случае успешного добавления записи
Код: plaintext
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.
Public Function ИмяФункции(ByVal Name As String) As Integer
            Dim myConnection As New SqlConnection(connectionString)
            Dim myCommand As New SqlCommand("ИмяПроцедуры", myConnection)

            myCommand.CommandType = CommandType.StoredProcedure

            ' Добавляем параметр в процедуру
            Dim parameterFullName As New SqlParameter("@Name", SqlDbType.NVarChar,  50 )
            parameterFullName.Value = Name
            myCommand.Parameters.Add(parameterFullName)

            Dim RecordID As New SqlParameter("@RecorID", SqlDbType.Int)
            RecordID.Direction = ParameterDirection.Output
            myCommand.Parameters.Add(RecordID)

            Try
                myConnection.Open()
                myCommand.ExecuteNonQuery()
            Catch err As Exception
                ' Ошибка :)
                Return - 1 
            Finally
                If myConnection.State = ConnectionState.Open Then
                    myConnection.Close()
                End If
            End Try
            Return CInt(RecordID.Value)
        End Function


Большое спасибо!!!!!!!!!!!!!!!!!!!!!!!!! Супер
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33036978
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<off>
из-за чего весь сыр-бор разгорелся ???

извините за плохой стиль, но это всего 3 строки без ХП
Код: plaintext
1.
2.
SqlCommand cmd=new SqlCommand("INSERT INTO T4 (nm) VALUES(@Name); SELECT SCOPE_IDENTITY();", cn);
cmd.Parameters.Add("@Name", "привет");
decimal res=(decimal)cmd.ExecuteScalar();
</off>
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #33037152
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, пришёл Кузя и, как всегда, всё расставил на свои места...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как получить Auto Incerment Value?
    #34879572
cunt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузя<off>
из-за чего весь сыр-бор разгорелся ???

извините за плохой стиль, но это всего 3 строки без ХП
Код: plaintext
1.
2.
SqlCommand cmd=new SqlCommand("INSERT INTO T4 (nm) VALUES(@Name); SELECT SCOPE_IDENTITY();", cn);
cmd.Parameters.Add("@Name", "привет");
decimal res=(decimal)cmd.ExecuteScalar();
</off>

А с Oracle-ом так вероятно?
INSERT INTO T4 (nm) VALUES(?) returning ID;
cmd.Parameters.Add("привет");
А с MsAccess?
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #34880206
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор MsAccess?
там вроде тоже можно
Код: plaintext
@@identity
получить
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #34880275
cunt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, там такого понятия нету.
Есть последовательности, из которых берутся значения триггерами Before Insert
Но результат тот же)
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #34880333
_logic_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cuntНе, там такого понятия нету.
Есть последовательности, из которых берутся значения триггерами Before Insert
Но результат тот же)
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q232144
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #34880404
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cuntНе, там такого понятия нету.
Есть последовательности, из которых берутся значения триггерами Before Insert
Но результат тот же)
в аксессе? триггерами?!!
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #34907236
cunt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не не.
Чего все испугались. я имел ввиду Oracle.
Если будет интерестно, способ нашел:
(Единственный - надежный для Oracle)

Надо
начать транзакцию
вставить строку
извлечть max(id) from mytable
прокоммитеть транзакцию

может быть тормозно будет (для кого-то) но в некоторых случаях лучше уж так, чем совсем никак.
...
Рейтинг: 0 / 0
как получить Auto Incerment Value?
    #34907289
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cuntДа не не.
Чего все испугались. я имел ввиду Oracle.
Если будет интерестно, способ нашел:
(Единственный - надежный для Oracle)

Надо
начать транзакцию
вставить строку
извлечть max(id) from mytable
прокоммитеть транзакцию

может быть тормозно будет (для кого-то) но в некоторых случаях лучше уж так, чем совсем никак.
че-то ваш способ не алё.
я с ораклом не работал, но вроде читал/слышал, что аналог идентити там можно получить перед вставкой, а не после, как в скуль-сервере. ораклисты, так ли?
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как получить Auto Incerment Value?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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