我是SQL 2005和Enterprise Library(版本4)的新手。我想调用一个Stored Proc并传递一个超过8000个字符的字符串。 db中的列定义为varchar(max)。我以为我首先通过从T-SQL调用存储过程进行一些测试然后我很惊讶插入的字符串值被截断,即使是短字符串也是如此。
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
一旦我上面的这个简单示例工作,我将需要弄清楚如何使用Enterprise库从VB.NET代码将长字符串传递给SP。该参数的数据类型是什么?我看到没有重载版本的AddInParameter方法接受长度,也没有看到“varchar(max)”枚举作为可用的数据类型。
dbCmd = db.GetStoredProcCommand("spr_ChadTest")
db.AddInParameter(dbCmd, "TestParam", SqlDbType.VarChar, TestParam.ToString)
谢谢!
答案 0 :(得分:1)
DECLARE @TestParam varchar
是您的TSQL中的问题。您需要将其声明为varchar(max)
数据类型,以避免在1个字符长度处截断。
答案 1 :(得分: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显示更多信息