2016-10-06 3 views
0

Ниже представлена ​​страница ASP, загрузка этой страницы Мне нужно выполнить хранимую процедуру. Мне нужно передать параметр в эту хранимую процедуру. Значение для этого параметра я получаю с сеанса. Хранимая процедура должна вставить запись в таблицу, и мне не нужно возвращать ее обратно. Я не могу заставить его выполнить с ASP-страницы, независимо от того, что я делаю. Пожалуйста помоги. Что я здесь делаю неправильно?Выполнение SQL Сохраненная процедура в классическом ASP

<% @Language=VBScript %> 
<%Response.Buffer = true%> 

<html> 
<head> 
</head> 

<body> 
<!--#include file = "connect.txt" -->  
<!--#include file= "adovbs.inc" --> 

<% 
Set conn = Server.CreateObject("ADODB.Connection") 
Set cmd = Server.CreateObject("ADODB.Command") 

'this will be my parameter 
Dim strID 
strID = Session("ID") 

ConnectionStr =  "Provider=SQLOLEDB;Server=***;Database=***;Uid=***;Pwd=***;" 
conn.Open ConnectionStr 

With cmd 
.ActiveConnection = conn 
.CommandType = adCmdStoredProc 
.CommandText = "sp_Application_Insert" 
.Parameters.Append cmd.CreateParameter("@TUID ", adVarchar, adParamInput, 200, strID) 
.Execute 


End With 
Set cmd = Nothing 
conn.close 
%> 

</body> 
</html> 
+1

Люди до сих пор пишут классический код жерех? Неужели ураган Мэтью поставил нас на время? Я не пытаюсь быть скупым ....... это сейчас технология динозавров. – granadaCoder

+0

@granadaCoder да ... некоторые люди все еще делают. Конечно, некоторые люди все еще используют SQL Server 2000 (или даже старше). Это не значит, что это хорошо. :) –

+0

Незначительный обход вопроса. Вы действительно должны избегать префикса sp_, или даже лучше, полностью избегать префикса. http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –

ответ

1
  1. Вы должны проверить параметр ..... что он существует, и его правильное значение ожидаемого типа данных
  2. Вам нужна какая-то ошибка оповещения/регистрации. Ниже приведен ваш код.

  3. Смешивание ADODB.Connection код (слой данных) и html/asp (слой представления) заставляет мои глаза болеть.

изменения, которые я сделал ниже от

https://support.microsoft.com/en-us/kb/300043

<% @Language=VBScript %> 
<%Response.Buffer = true%> 

<html> 
<head> 
</head> 

<body> 
<!--#include file = "connect.txt" -->  
<!--#include file= "adovbs.inc" --> 

<% 
On Error Resume Next 
Set conn = Server.CreateObject("ADODB.Connection") 
Set cmd = Server.CreateObject("ADODB.Command") 

'this will be my parameter 
Dim strID 
strID = Session("ID") 

ConnectionStr =  "Provider=SQLOLEDB;Server=***;Database=***;Uid=***;Pwd=***;" 
conn.Open ConnectionStr 

With cmd 
.ActiveConnection = conn 
.CommandType = adCmdStoredProc 
.CommandText = "sp_Application_Insert" 
.Parameters.Append cmd.CreateParameter("@TUID ", adVarchar, adParamInput, 200, strID) 
.Execute 

if Err.Number <> 0 then 

    Response.Write "An Error Has Occurred on this page!<BR>" 
    Response.Write "The Error Number is: " & Err.number & "<BR>" 
    Response.Write "The Description given is: " & Err.Description & "<BR>" 

'' you can try the below too 
' Set objASPError = Server.GetLastError 

' response.write "Category: " & objASPError.Category & _ 
    ' "ASPCode: " & objASPError.ASPCode & _ 
    ' "Number: " & objASPError.Number & _ 
    ' "ASPDescription: " & objASPError.ASPDescription & _ 
    ' "Description: " & objASPError.Description & _ 
    ' "Source: " & objASPError.Source 

end if 


End With 
Set cmd = Nothing 
conn.close 
%> 

</body> 
</html> 

АППЕНД

https://msdn.microsoft.com/en-us/library/ms345484.aspx

GRANT EXECUTE ON OBJECT::dbo.sp_Application_Insert 
    TO ***; /* where *** is your uid value in your connection string that you did not show */ 
+0

спасибо. Я не буду использовать строку подключения в своем коде, когда я, наконец, попробую выполнить этот процесс. Первоначально я просто использовал con.Open, и я знаю, что это работает, потому что я могу выполнить con.Open rs.Open «SELECT ID_ID FROM Person, где ix_National_ID = '" & strStudentID & "'", con, adOpenKeyset, adLockOptimistic – Olesya

+0

Спасибо за код ошибки, я получил разрешение на отказ выполнить ошибку. Произошла ошибка на этой странице! Номер ошибки: -2147217911 Данное описание: Разрешение EXECUTE было отклонено на объект «Application_Insert», базу данных «DBName», схему «dbo». – Olesya

+0

Теперь вы знаете, что не так. Посмотрите https://msdn.microsoft.com/en-us/library/ms345484.aspx – granadaCoder

-1

Финальный код:

Dim strStudentID 
Dim transactionId 
strStudentID = Session("ix_National_ID") 
transactionId = Session("transactionId") 

Session("accesslevel") = "" 
session("SessionStatus") = "5" 




Set cmd = server.createobject("ADODB.command") 
With cmd 
.ActiveConnection = con 
.CommandType = adCmdStoredProc 
.CommandText = "Temple_sp_Application_Insert" 
.Parameters.Append cmd.CreateParameter("@TUID ", adVarchar, adParamInput, 200, strStudentID) 
.Parameters.Append cmd.CreateParameter("@transactionId ", adVarchar,  adParamInput, 200, transactionId) 
.Execute 

if Err.Number <> 0 then 

Response.Write "An Error Has Occurred on this page!<BR>" 
Response.Write "The Error Number is: " & Err.number & "<BR>" 
Response.Write "The Description given is: " & Err.Description & "<BR>" 



end if 


End With 
Set cmd = Nothing 
Set Con = Nothing 

con.Close 

Я получаю следующую ошибку, обратите внимание, что в конце описания ошибки есть переменная Session (strStudentID).

  1. Эта ошибка я получаю на сервере Номер ошибки: -2147217911 Описание, данное является: [Microsoft] [SQL Server Native Client 11.0] [SQL Server]

  2. Эта ошибка находится на непроизводственном сервере. Номер ошибки: -2147217911 Описание, данное является: [Microsoft] [ODBC SQL Server Driver] [SQL Server] 915111111

+2

strID <> strStudentID. –

Смежные вопросы