我需要一些TEXT
列在SQL Server 2008中表執行INSERT
秒,我不能爲TEXT
列工作的ADODB.Command
參數。添加文本參數ADODB.Command不使用存儲過程
表定義爲:
CREATE TABLE dbo.Test (
TestId INT NOT NULL IDENTITY(1, 1)
, CreationDate DATETIME NOT NULL
, Value TEXT NOT NULL
, CONSTRAINT pkTest PRIMARY KEY (TestId)
)
測試頁是這樣的:
<!-- METADATA TYPE="typelib" NAME="Microsoft ActiveX Data Objects 2.8 Library" UUID="{2A75196C-D9EB-4129-B803-931327F72D5C}" VERSION="2.8" -->
<%@ CODEPAGE = 65001 LCID = 1040 %>
<%
Option Explicit
Response.Clear
Response.CharSet = "UTF-8"
Response.CodePage = 65001
Response.ContentType = "text/plain"
Dim i : i = 0
Dim value : value = ""
For i = 1 To 10000
If i Mod 3 = 0 Then
value = value & "a "
Else
value = value & "a"
End If
Next
Dim connection : Set connection = Server.CreateObject("ADODB.Connection")
connection.CommandTimeout = 5
connection.ConnectionString = "Server=XXX; Database=XXX; Uid=XXX; Pwd=XXX;"
connection.ConnectionTimeout = 5
connection.IsolationLevel = adXactReadUncommitted
connection.Mode = adModeRead
connection.Provider = "SQLOLEDB"
connection.Open
Dim command : Set command = Server.CreateObject("ADODB.Command")
command.ActiveConnection = connection
command.CommandText = "insert into dbo.Test (CreationDate, Value) values (getdate(), ?)"
command.CommandTimeout = 5
command.CommandType = adCmdText
command.Parameters.Append command.CreateParameter("Value", adVarChar, adParamInput, 0, value)
command.Prepared = True
command.Execute
Set command = Nothing
connection.Close
Set connection = Nothing
Response.End
%>
當我執行它,我得到這個錯誤:
ADODB.Command error '800a0d5d'
Application uses a value of the wrong type for the current operation.
/test/default.asp, line 32
32號線是
command.Parameters.Append command.CreateParameter("Value", adVarChar, adParamInput, 0, value)
我試過改變Size參數,無濟於事。
環顧四周,我發現How to call SQL Server stored procedures from ASP的Microsoft知識庫文章稱網,它的「方法1」的例子很有趣,因爲它不聲明參數,但讀取它們形成服務器:
cmd.CommandText = "sp_test"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters(1) = 11
所以我創建的存儲的過程來執行INSERT
:
CREATE PROCEDURE dbo.TestInsertion (@CreationDate DATETIME, @Value TEXT) AS BEGIN
SET NOCOUNT ON
INSERT INTO dbo.Test (CreationDate, Value) VALUES (@CreationDate, @Value)
SELECT TestId = SCOPE_IDENTITY()
END
和改性在頁面這樣的ADODB.Command
位:
Dim command : Set command = Server.CreateObject("ADODB.Command")
command.ActiveConnection = connection
command.CommandText = "dbo.TestInsertion"
command.CommandTimeout = 5
command.CommandType = adCmdStoredProc
command.Parameters.Refresh
command.Parameters(1).Value = Date
command.Parameters(2).Value = value
command.Prepared = True
command.Execute
Set command = Nothing
它工作。
是否有可能在傳統的ASP中指定TEXT
參數ADODB.Command
s而不使用存儲過程?
優秀,'adLongVarChar'工程;但是我必須指定參數的長度,否則我得到'Parameter對象被錯誤地定義。提供了不一致或不完整的信息。我已經相應地更新了你的答案。 – Albireo