Прошло много времени с тех пор, как я выполнил какую-нибудь классическую работу с жерехами, но недавно меня попросили выбрать проект, над которым работал кто-то другой, который был беспорядочным.
На сайте есть база данных SQL Server 2008, и мне нужно добавить запись и извлечь столбец автоматической идентификации в качестве параметра out.
Мой код asp показан здесь ...
Call fncOpenData()
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = oConn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "usp_ins_MyRecord"
cmd.Parameters.Refresh
cmd.Parameters.Append cmd.CreateParameter("@MyValue", adVarChar, adParamInput, 10)
cmd.Parameters("@MyValue") = Request.Form("MyValue")
cmd.Execute
и моя хранимая процедура была создана с кодом здесь ...
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE usp_ins_MyRecord
@MyValue varchar(10)
AS
BEGIN
INSERT INTO [MyRecords]
(
[MyValue]
)
VALUES
(
@MyValue
)
END
GO
Теперь, когда я запускаю свою страницу asp, я получаю следующую ошибку ...
"Поставщик Microsoft OLE DB для драйверов ODBC '80040e14'
[Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Процедура или функция
У usp_ins_MyRecord слишком много аргументов.
/ MyPage.asp, line ... "
Если я уберу строку
cmd.Parameters.Refresh
Я получаю следующую ошибку ...
"Поставщик Microsoft OLE DB для драйверов ODBC '80040e14'
[Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Процедура или функция
«usp_ins_MyRecord» ожидает параметр «@MyValue», который не был
в комплект поставки.
/ MyPage.asp, line ... "
Хм, да это было?!
Если я изменю свой код любым другим способом, добавив параметр, например
cmd.Parameters.Append cmd.CreateParameter("@MyValue", adVarChar, adParamInput, 10, Request.Form("MyValue")
или
myValue = Request.Form("MyValue")
Set param = cmd.CreateParameter("@MyValue", advarchar, adParamInput, 10)
cmd.Parameters.Append param
param.Value = myValue
Я получаю ту же ошибку, что и раньше, заявляя, что параметр не указан?
Я знаю, что технология устарела, и я действительно хотел бы использовать .Net, но это то, что я должен использовать, но я вырываю свои волосы здесь и не добираюсь быстро.
Может кто-нибудь увидеть, что не так, или объяснить, почему у меня возникают проблемы при получении ASP для использования хранимых процедур SQL Server 2008?
Спасибо.