2011-02-14 95 views
3

我是SQL 2005和Enterprise Library(版本4)的新手。我想調用Stored Proc並傳遞超過8000個字符的字符串。 db中的列被定義爲varchar(max)。我以爲我會先從T-SQL調用存儲過程開始進行一些小測試,我驚訝於插入的字符串值被截斷,即使是一個簡短的字符串。在存儲過程中使用varchar(max)。爲什麼插入值被截斷?

CREATE TABLE [dbo].[ChadTest](
    [TestParam] [varchar](max) NOT NULL 
) ON [CMISII_DATA] 

GO 

ALTER PROCEDURE [dbo].[spr_ChadTest] 
(
@TestParam varchar(max) 
) 
AS 
BEGIN 
INSERT INTO ChadTest 
    (TestParam) VALUES (@TestParam) 
END 

DECLARE @RC int 
DECLARE @TestParam varchar 

-- TODO: Set parameter values here. 
SET @TestParam = '12345' 
EXECUTE @RC = [CMISII].[dbo].[spr_ChadTest] 
    @TestParam 

Select TestParam, len(TestParam) from chadtest 

輸出:

1   1 

一旦我得到上述工作這個簡單的例子,我需要弄清楚如何長字符串從VB.NET代碼使用企業庫傳遞給SP 。參數的數據類型是什麼?我沒有看到接受長度的AddInParameter方法的重載版本,也沒有看到「varchar(max)」枚舉作爲可用數據類型。

dbCmd = db.GetStoredProcCommand("spr_ChadTest") 
    db.AddInParameter(dbCmd, "TestParam", SqlDbType.VarChar, TestParam.ToString) 

謝謝!

回答

1
DECLARE @TestParam varchar 

是您的TSQL中的問題。您需要聲明爲varchar(max)數據類型以避免截斷1個字符長度。

+0

對於ADO.NET一部分,我不記得確切。在某些情況下,它使用-1來表示`max`,但我有一種感覺,你不需要在這裏給出一個長度,它只是爲自己工作。 – 2011-02-14 12:17:02

0

TestParam的變量定義在結尾處缺少(MAX)。這將解決您的SQL查詢問題。下面的代碼將添加一個參數到SqlCommand,允許從VB .Net ASP應用程序中使用VARCHAR(MAX)

' Set up the output parameter to retrieve the summary. 
Dim paramSummary As SqlParameter = New SqlParameter("@TestParam", SqlDbType.VarChar, -1) 
command.Parameters.Add(paramSummary) 

以下link顯示更多信息