Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Возрат SCOPE_IDENTITY()


Автор: Gregoryy 13.2.2008, 13:52
Народ помогите решить вот такой вопрос. У меня ест большой запрос вставки новой записи в одной таблице и обновление записи в другой таблице. После ставки я получаю идентификатор новой записи. Вот как мне полученное число передать за приделы запроса?

Автор: Mymik 13.2.2008, 14:38
а что значит передать за пределы запроса ??? в смысле возвратить на клиент ???
Когда ты передаешь параметры в процедуру тебе надо сделать параметр ID -->>
Код

command.Parameters.Add( OutputParameter("@ID",DbType.Int32) );


Потом выплоняешь запрос и
Код

this.ExecuteNonQuery(command);
int ID = (int) command.Parameters["@ID"].Value;


А непосредственно в SQL процедуре ты пишешь 
В передаваемых параметрах
Код

@ID int    OUTPUT,

в теле
Код

SET @ID = SCOPE_IDENTITY()

Автор: Gregoryy 13.2.2008, 15:41
Короче дело в том, что я пишу сейчас форму где генерируется ссылка на созданный новый топик или ответ на форуме. И мне надо в эту ссылку передать ID записи. 
Код

string MySqlSelect = "INSERT INTO systems_Forums_Topic (Forum_ID,TITLE) VALUES (" + sForumId + ",'" + sTitle + "');"
            +" DECLARE @Nomer int; SET @Nomer = SCOPE_IDENTITY();"
            +" INSERT INTO systems_Forums_Post (TOPIC_ID,TEXT,USER_ID,USER_IP,DATA_POST) VALUES (@Nomer,'"+sMsg+"',"+sUserId+",'"+sIp+"',getdate());"
            + " DECLARE @Post int; SET @Post = SCOPE_IDENTITY();"
            + "UPDATE systems_Users SET AMOUNT_POST = AMOUNT_POST+1 WHERE ID = " + sUserId + "; "
            +"UPDATE systems_Forums SET AMOUNT_POST=AMOUNT_POST+1,LAST_TOPIC_ID = " + sTopicId + ",LAST_TOPIC_USER_ID=" + sUserId + ",LAST_TOPIC_OSER_NAME='" + sUserName + "' WHERE ID = " + sForumId + "; "
            + "UPDATE systems_Forums_Topic SET LAST_POST_ID=@Post,LAST_POST_USER_ID=" + sUserId + ",LAST_POST_USER_NAME='" + sUserName + "',LAST_POST_DATE=getdate(),AMOUNT_POST=1";
            string sConnected = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString();
            using (SqlConnection MySqlconect = new SqlConnection(sConnected))
            {
                SqlCommand MySqlComand = new SqlCommand(MySqlSelect, MySqlconect);
                MySqlconect.Open();
                MySqlComand.ExecuteNonQuery();
                
            }

И мне надо получить число, которое получает @Nomer

Автор: Gregoryy 13.2.2008, 23:10
Нашел ответ 
id = MySqlComand.ExecuteScalar().ToString();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)