2011-12-13 5 views
3
TEXT 열이있는 SQL Server 2008의 테이블에 INSERT의를 수행 할 필요가

를 사용하지 않고의 ADODB.Command, 그리고 나는 TEXT 열 작업에 대한 ADODB.Command 매개 변수를 가질 수 없습니다.추가 TEXT 매개 변수는 저장 프로 시저

테이블은 정의로 : 테스트 페이지는 다음과 같이이다

CREATE TABLE dbo.Test (
    TestId INT NOT NULL IDENTITY(1, 1) 
    , CreationDate DATETIME NOT NULL 
    , Value TEXT NOT NULL 
    , CONSTRAINT pkTest PRIMARY KEY (TestId) 
) 

:

ADODB.Command error '800a0d5d' 
Application uses a value of the wrong type for the current operation. 
/test/default.asp, line 32 

행 32 : 나는 그것을 실행하면

<!-- 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 
%> 

,이 오류가 발생합니다 은

command.Parameters.Append command.CreateParameter("Value", adVarChar, adParamInput, 0, value) 

크기 매개 변수를 변경해 보았습니다. 그래서

cmd.CommandText = "sp_test" 
cmd.CommandType = adCmdStoredProc 
cmd.Parameters.Refresh 
cmd.Parameters(1) = 11 

:이 매개 변수를 선언하지 않고 그들을 서버를 형성 읽기 나는라는 Microsoft 기술 자료 문서 How to call SQL Server stored procedures from ASP을 발견 그물 주위를 찾고

는 그 "방법 1"예, 재미있다 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 :

,617을
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에서 ADODB.CommandTEXT 매개 변수를 지정할 수 있습니까?

답변

8

텍스트 데이터 형식에 대해 adLongVarChar 상수를 전달합니다.

adLongVarChar 또한 value 크기를 지정해야합니다. 그렇지 않으면 Parameter object is improperly defined. Inconsistent or incomplete information was provided. 오류가 발생합니다.

command.Parameters.Append command.CreateParameter("Value", adLongVarChar, adParamInput, Len(value), value) 

일부 ADO Data Type Mappings을 참조하십시오.

+0

우수한 'adLongVarChar' 작품; 그러나 매개 변수의 길이를 지정해야합니다. 그렇지 않으면'Parameter 개체가 부적절하게 정의됩니다. 불일치하거나 불완전한 정보가 제공되었습니다. 그에 따라 귀하의 답변을 업데이트했습니다. – Albireo