Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как получить результат ХП на aspx странице / 12 сообщений из 12, страница 1 из 1
27.06.2015, 18:42
    #38994333
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Доброго времени суток всем,

у меня вот такой вопрос:

есть ХП:

Код: sql
1.
2.
3.
4.
5.
ALTER PROC [dbo].[GetID] 
AS
BEGIN
SELECT MAX(record_id) FROM  [dbo].[sampletbl]
END



И мне нужно получить результат в страницу:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ACSConnectionString"].ConnectionString);
SqlCommand comm2 = new SqlCommand();

            comm2.CommandText = "GetID";
            comm2.CommandType = CommandType.StoredProcedure;
            comm2.Connection = conn;

            // необходимо добавить следующую запись в БД  
            string idinserter = "ХК05-" + comm2.CommandText + "/21"; 

            SqlParameter sentnumParam = new SqlParameter("sentnumber", idinserter);

            comm.Parameters.Add(sentnumParam);
            
            conn.Open();
            comm2.ExecuteNonQuery();
            conn.Close();



Но я получаю следующую запись в БД:

ХК05-System.Data.Sql

За ранее благодарю !
...
Рейтинг: 0 / 0
27.06.2015, 18:45
    #38994335
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
идея такого, что при каждой новой записи, ХП выдает последний ID таблицы, и на основе этого создается номер записи.
...
Рейтинг: 0 / 0
27.06.2015, 19:06
    #38994338
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Во-первых я не нашел, где вообще что-то вставляется в таблицу.
Во-вторых, почему бы не воспользоваться Identity, зачем вычислять новый номер вручную?
...
Рейтинг: 0 / 0
28.06.2015, 00:57
    #38994413
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Shocker.Pro,
спасибо, ЗА исправление)

Вот моя задача:
страница ввода_данных.aspx
страница просмотр.aspx (здесь стоит GridView к которому привязаны три таблицы, через View)

Organ: @organ varchar (100) TextBox
Subject: @sunject varchar (200) TextBox
Sent number: "text1" + @sentnumber + "text2" varchar (20) // планирую получить через код С#
Entry date:    @date smalldatetime Label

Значение трех полей я получаю через ХП DataInsert:

Код: sql
1.
2.
3.
4.
5.
6.
7.
ALTER PROC [dbo].[DataInsert]
(@organ varchar (100), @subject varchar(200), @sentnumber varchar(20), @entrydate smalldatetime)
AS
BEGIN
INSERT INTO [dbo].[sampletbl] (organ, subject, sentnumber, entrydate)
VALUES (@organ, @subject, @sentnumber, @entrydate)
END



Последний ID таблицы получаю через ХП GetID:

Код: sql
1.
2.
3.
4.
5.
ALTER PROC [dbo].[GetID] 
AS
BEGIN
SELECT MAX(record_id) FROM  [dbo].[sampletbl]
END



Добавление в БД (C# code):

Код: 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.
            //sozdanie connectionsting-a
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ACSConnectionString"].ConnectionString);
            SqlCommand comm = new SqlCommand();

            // vizov xranimoi proceduri
            comm.CommandText = "DataInsert"; 
            comm.CommandType = CommandType.StoredProcedure;
            comm.Connection = conn;

            // vizov vtoroi xranimoi proceduri dlya polucheniya poslednego ID
            comm2.CommandText = "GetID";
            comm2.CommandType = CommandType.StoredProcedure;
            comm2.Connection = conn;
               
            string idinserter = "ХК05-" + comm2.CommandText + "/21";
            SqlParameter organParam = new SqlParameter("organ", organtxt.Text);
            SqlParameter subjectParam = new SqlParameter("subject", subjecttxt.Text);
            SqlParameter sentnumParam = new SqlParameter("sentnumber", idinserter);

            DateTime dt = DateTime.Now;
            datelbl.Text = dt.ToString("d", CultureInfo.CreateSpecificCulture("de-DE"));


            SqlParameter entrydateParam = new SqlParameter("entrydate", datelbl.Text);

            comm.Parameters.Add(organParam);
            comm.Parameters.Add(subjectParam);
            comm.Parameters.Add(sentnumParam);
            comm.Parameters.Add(entrydateParam);

            conn.Open();
            comm.ExecuteNonQuery();
            comm2.ExecuteNonQuery();
            conn.Close();

            GridView1.DataBind();





Проблема:

при добавлении новой записи, @sentnumber должен быть равным "ID последней записи + 1".
Как получить это значение ?
...
Рейтинг: 0 / 0
28.06.2015, 01:15
    #38994416
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
febonacciпри добавлении новой записи, @sentnumber должен быть равным "ID последней записи + 1".
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
ALTER PROC [dbo].[DataInsert]
(@organ varchar (100), @subject varchar(200), @entrydate smalldatetime)
AS
declare @sentnumber varchar(20)
SELECT @sentnumber=cast(MAX(record_id)+1 as varchar(20)) FROM  [dbo].[sampletbl]

INSERT INTO [dbo].[sampletbl] (organ, subject, sentnumber, entrydate)
VALUES (@organ, @subject, @sentnumber, @entrydate)

так что ли?
...
Рейтинг: 0 / 0
28.06.2015, 02:49
    #38994433
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Уважаемый Shocker.Pro,

спасибо, работает.

Подскажите пож-ста, где здесь моя ошибка:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ALTER PROC [dbo].[DataInsert]
(@organ varchar (100), @subject varchar(200), @emp_id int, @entrydate smalldatetime)
AS
BEGIN
declare @sentnumber varchar(20)
SELECT @sentnumber=cast(MAX(record_id)+1 as varchar(20)) FROM  [dbo].[sampletbl]

INSERT INTO [dbo].[sampletbl] (organ, subject, sentnumber, emp_id, entrydate)
VALUES (@organ, @subject, 'ХК/05-' + @sentnumber + @emp_id, @emp_id, @entrydate)

END



Как ранее писал:
Sent number: "text1" + @sentnumber + "text2" varchar (20) // планирую получить через код С#
где,
text1 = const
text2 = @employee_id // планирую получить из dropdownlist.

Но в MS Sql получаю следующую ошибку:

Сообщение 245, уровень 16, состояние 1, процедура DataInsert, строка 9
Ошибка преобразования значения varchar "ХК/05-8" в тип данных int.

Как правильно передать @sentnumber в виде:
@sentnumber = "XK/05-" + @sentnumber + @employee_id

Спасибо, за саппорт !
...
Рейтинг: 0 / 0
28.06.2015, 02:53
    #38994434
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
нужно немного включить серое вещество, ведь ответ есть на две строки выше

Код: sql
1.
cast(@emp_id as varchar)
...
Рейтинг: 0 / 0
28.06.2015, 03:09
    #38994435
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Уважаемый Shocker.Pro,

действительно все заработало!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
ALTER PROC [dbo].[DataInsert]
(@organ varchar (100), @subject varchar(200), @emp_id int, @entrydate smalldatetime)
AS
BEGIN
declare @sentnumber varchar(20)
SELECT @sentnumber=cast(MAX(record_id)+1 as varchar(20)) FROM  [dbo].[sampletbl]

INSERT INTO [dbo].[sampletbl] (organ, subject, sentnumber, emp_id, entrydate)
VALUES (@organ, @subject, 'ХК/05-' + @sentnumber + '/' + cast(@emp_id as varchar(10)), @emp_id, @entrydate)



Спасибо, еще раз !

p.s.: посоветуйте литературу, пож-ста, по этим темам. Пользуюсь сайтом lynda.com, где полезного много, но все в узкой форме дается.
...
Рейтинг: 0 / 0
28.06.2015, 11:21
    #38994465
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
смотря по каким "этим".
в данном случае явно нужно прочитать учебник по основам БД и по SQL/TSQL на базе MSSQL Server
...
Рейтинг: 0 / 0
28.06.2015, 12:10
    #38994471
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Shocker.Pro,

понятно, спасибо!
...
Рейтинг: 0 / 0
05.07.2015, 14:05
    #38999865
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Доброго времени суток,

я добавил еще несколько контролов в страницу, и изменил код. Но к сожалению получаю в конце ошибку.
Помогите, плиз, где моя ошибка:

Store Procedure:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ALTER PROC [dbo].[DataInserter]
(@employee_id int, @doctype_id int, @docchar_id int, @authority varchar (100), @subject varchar (200), @entrydate datetime, @login varchar (50))
AS
BEGIN
DECLARE @sentnumber varchar (20)
SELECT @sentnumber = CAST(MAX(Letter_ID)+1 as varchar(20)) FROM [dbo].[SentLetters]

INSERT INTO [dbo].[SentLetters] (Employee_ID, DocType_ID, DocChar_ID, Authority, Subject, Sentnumber, Entrydate, Login)
VALUES (@employee_id, @doctype_id, @docchar_id, @authority, @subject, 'ХК/05-' + @sentnumber + '/' + cast(@employee_id as varchar(10)),@entrydate,@login)
END



Code behind:

Код: 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.
  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NameofCS"].ConnectionString);
        SqlCommand comm = new SqlCommand();
        
        // присоединяем ХП.
        comm.CommandText = "DataInserter";
        comm.CommandType = CommandType.StoredProcedure;
        comm.Connection = conn;

        // Добавление значений в поля таблицы
        SqlParameter employeeparam = new SqlParameter("employee_ID", int.Parse(ddlemployee.SelectedItem.Value));
        SqlParameter doctypeparam = new SqlParameter("doctype_ID", int.Parse(ddldoctype.SelectedItem.Value));
        SqlParameter doccharparam = new SqlParameter("docchar_ID", int.Parse(ddlemployee.SelectedItem.Value));
        SqlParameter authorityparam = new SqlParameter("authority", txtauthority.Text);
        SqlParameter subjectparam = new SqlParameter("subject", txtsubject.Text);
        SqlParameter sentnumberparam = new SqlParameter("sentnumber", @sentnumber);
        SqlParameter entrydateparam = new SqlParameter("entrydate", txtentrydate.Text);
        SqlParameter loginparam = new SqlParameter("login", "jsomon");

        comm.Parameters.Add(employeeparam);
        comm.Parameters.Add(doctypeparam);
        comm.Parameters.Add(doccharparam);
        comm.Parameters.Add(authorityparam);
        comm.Parameters.Add(subjectparam);
        comm.Parameters.Add(sentnumberparam);
        comm.Parameters.Add(entrydateparam);
        comm.Parameters.Add(loginparam);
       
        // открываем коннекшен, и выполняем команду записи
        conn.Open();
        comm.ExecuteNonQuery();
        //закрываем коннекшен
        conn.Close();



Далее в поля формы добавляю данные, и при нажатии кнопки получаю ошибку:

Код: css
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.
Ошибка сервера в приложении '/'.

Для процедуры или функции DataInserter указано слишком много аргументов.

Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода. 

Сведения об исключении: System.Data.SqlClient.SqlException: Для процедуры или функции DataInserter указано слишком много аргументов.

Ошибка источника: 


Строка 46:         // открываем коннекшен, и выполняем команду записи
Строка 47:         conn.Open();
[color=red]Строка 48:         comm.ExecuteNonQuery();[/color]
Строка 49:         //закрываем коннекшен
Строка 50:         conn.Close();

Исходный файл: c:\Users\wert\Documents\Visual Studio 2013\WebSites\Letters\EnrollLetter.aspx.cs    Строка: 48 

Трассировка стека: 


[SqlException (0x80131904): Для процедуры или функции DataInserter указано слишком много аргументов.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1789294
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5340642
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1691
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +275
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +1421
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +208
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +163
   EnrollLetter.Button1_Click(Object sender, EventArgs e) in c:\Users\wert\Documents\Visual Studio 2013\WebSites\Letters\EnrollLetter.aspx.cs:48
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628614
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724



Помогите найти мою ошибку.

Спасибо !
...
Рейтинг: 0 / 0
05.07.2015, 16:21
    #38999919
febonacci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить результат ХП на aspx странице
Нашел проблему.

Поле sentnumber получает значение здесь:
Код: sql
1.
 SqlParameter sentnumberparam = new SqlParameter("sentnumber", @sentnumber);

;

А остальные поля:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
comm.Parameters.Add(employeeparam);
        comm.Parameters.Add(doctypeparam);
        comm.Parameters.Add(doccharparam);
        comm.Parameters.Add(authorityparam);
        comm.Parameters.Add(subjectparam);
        comm.Parameters.Add(sentnumberparam); // экстра запись 
        comm.Parameters.Add(entrydateparam);
        comm.Parameters.Add(loginparam);
       



Поэтому получал ошибку:
Код: css
1.
Для процедуры или функции DataInserter указано слишком много аргументов.



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


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