ADO中sqlserver存储过程使用

从ADO中得到多个记录集以及怎么样在ADO中使用sql server 的存储过程

DataTypeValueLengthData Length
BIGINT996857543543543158
INT54354364
SMALLINT3276552
TINYINT25431
BITTrue11
DECIMAL765.5432321119
NUMERIC432.654485
MONEY543.123468
SMALLMONEY543.123464
FLOAT5.4E+5488
REAL2.43E+2494
DATETIME8/31/2003 11:55:25 PM198
SMALLDATETIME8/31/2003 11:55:00 PM194
CHARQWE 34
VARCHARVariable!99
TEXT  307
NCHARWIDE48
NVARCHAR 00
NTEXT  614
GUID{58F94A80-B839-4B35-B73C-7F4B4D336C3C}3616

Return Value: 0

CREATE PROCEDURE "dbo"."DataTypeTester"
     @myBigInt bigint
     , @myInt int
     , @mySmallint smallint
     , @myTinyint tinyint
     , @myBit bit
     , @myDecimal decimal(10, 7)
     , @myNumeric numeric(7, 4)
     , @myMoney money
     , @mySmallMoney smallmoney
     , @myFloat float
     , @myReal real
     , @myDatetime datetime
     , @mySmallDatetime smalldatetime
     , @myChar char(4)
     , @myVarchar varchar(10)
     , @myText text
     , @myNChar nchar(4)
     , @myNVarchar nvarchar(10)
     , @myNText ntext
     , @myGuid uniqueidentifier
 AS
 
 SELECT 'BIGINT' "DataType", @myBigInt "Value" , LEN(@myBigInt) "Length"              , DATALENGTH(@myBigInt) "Data Length"
 SELECT 'INT'              , @myInt            , LEN(@myInt)                          , DATALENGTH(@myInt)
 SELECT 'SMALLINT'         , @mySmallint       , LEN(@mySmallint)                     , DATALENGTH(@mySmallint)
 SELECT 'TINYINT'          , @myTinyint        , LEN(@myTinyint)                      , DATALENGTH(@myTinyint)
 SELECT 'BIT'              , @myBit            , LEN(@myBit)                          , DATALENGTH(@myBit)
 SELECT 'DECIMAL'          , @myDecimal        , LEN(@myDecimal)                      , DATALENGTH(@myDecimal)
 SELECT 'NUMERIC'          , @myNumeric        , LEN(@myNumeric)                      , DATALENGTH(@myNumeric)
 SELECT 'MONEY'            , @myMoney          , LEN(CAST(@mySmallMoney as varchar))  , DATALENGTH(@myMoney)
 SELECT 'SMALLMONEY'       , @mySmallMoney     , LEN(CAST(@mySmallMoney as varchar))  , DATALENGTH(@mySmallMoney)
 SELECT 'FLOAT'            , @myFloat          , LEN(@myFloat)                        , DATALENGTH(@myFloat)
 SELECT 'REAL'             , @myReal           , LEN(@myReal)                         , DATALENGTH(@myReal)
 SELECT 'DATETIME'         , @myDatetime       , LEN(@myDatetime)                     , DATALENGTH(@myDatetime)
 SELECT 'SMALLDATETIME'    , @mySmallDatetime  , LEN(@mySmallDatetime)                , DATALENGTH(@mySmallDatetime)
 SELECT 'CHAR'             , @myChar           , LEN(@myChar)                         , DATALENGTH(@myChar)
 SELECT 'VARCHAR'          , @myVarchar        , LEN(@myVarchar)                      , DATALENGTH(@myVarchar)
 SELECT 'TEXT'             , ''                , ''                                   , DATALENGTH(@myText)
 SELECT 'NCHAR'            , @myNChar          , LEN(@myNChar)                        , DATALENGTH(@myNChar)
 SELECT 'NVARCHAR'         , @myNVarchar       , LEN(@myNVarchar)                     , DATALENGTH(@myNVarchar)
 SELECT 'NTEXT'            , ''                , ''                                   , DATALENGTH(@myNText)
 SELECT 'GUID'             , @myGuid           , LEN(@myGuid)                         , DATALENGTH(@myGuid)
 
 -- TODO:  READTEXT should do this...
 /*
     , @myText "text"
     , @myNText "ntext"
 */
 
 RETURN(0)
 
 
 

Code:
    <!--#include virtual="/testsite/global_include.asp" --> <% Dim conn 'As ADODB.Connection Dim cmd 'As ADODB.Command Dim prm 'As ADODB.Parameter Dim rs 'As ADODB.Recordset Dim ret 'As Long Dim proc 'As String Dim allData() 'As Variant Dim colNames() 'As Variant Dim i 'As Long Dim datetime 'As DateTime Const StoredProcedure = "[dbo].[DataTypeTester]" Const titleString = "<html><head><title>ADO Parameter Test 3 / Multiple Recordset Tester</title> rel=""stylesheet"" href=""/Templates/style.css"" type=""text/css"" /></head><body><div align=""left""><h3>A example of how to retrieve multiple recordsets from ADO and how to set parameters in ADO for SQL Server Stored Procedures</h3>" ReDim allData(0) ' initialize array dimension datetime = Now() Response.Write titleString Set conn = Server.CreateObject("ADODB.Connection") Set cmd = Server.CreateObject("ADODB.Command") conn.Open Application("connectionString") With cmd Set .ActiveConnection = conn .CommandText = StoredProcedure ' always use ADO constants .CommandType = adCmdStoredProc ' Check into the NamedParameters property at some point ' It doesn't require the order to be enforced, but it is always a good idea to enforce it anyway (for the documentation aspect of coding) ' RETURN parameter needs to be first .Parameters.Append cmd.CreateParameter("RETURN", adInteger, adParamReturnValue, 4) .Parameters.Append .CreateParameter("@myBigInt", adBigInt, adParamInput, 8, 996857543543543) .Parameters.Append .CreateParameter("@myInt", adInteger, adParamInput, 4, 543543) .Parameters.Append .CreateParameter("@mySmallint", adSmallInt, adParamInput, 2, 32765) .Parameters.Append .CreateParameter("@myTinyint", adTinyInt, adParamInput, 1, 254) .Parameters.Append .CreateParameter("@myBit", adBoolean, adParamInput, 4, True) ' Only Decimal and Numeric needs Precision and NumericScale .Parameters.Append .CreateParameter("@myDecimal", adDecimal, adParamInput, 9, 765.5432321) With .Parameters.Item("@myDecimal") .Precision = 10 .NumericScale = 7 End With Set prm = .CreateParameter("@myNumeric", adNumeric, adParamInput, 5, 432.6544) prm.Precision = 7 prm.NumericScale = 4 .Parameters.Append prm Set prm = Nothing .Parameters.Append .CreateParameter("@myMoney", adCurrency, adParamInput, 8, 543.1234) .Parameters.Append .CreateParameter("@mySmallMoney", adCurrency, adParamInput, 4, 543.1234) .Parameters.Append .CreateParameter("@myFloat", adDouble, adParamInput, 8, 5.4E+54) .Parameters.Append .CreateParameter("@myReal", adSingle, adParamInput, 4, 2.43E+24) .Parameters.Append .CreateParameter("@myDatetime", adDBTimeStamp, adParamInput, 8, datetime) .Parameters.Append .CreateParameter("@mySmallDatetime", adDBTimeStamp, adParamInput, 4, datetime) .Parameters.Append .CreateParameter("@myChar", adChar, adParamInput, 4, "QWE") .Parameters.Append .CreateParameter("@myVarchar", adVarchar, adParamInput, 10, "Variable!") .Parameters.Append .CreateParameter("@myText", adLongVarChar, adParamInput, Len(titleString)) .Parameters.Item("@myText").AppendChunk titleString .Parameters.Append .CreateParameter("@myNChar", adWChar, adParamInput, 4, "WIDE") .Parameters.Append .CreateParameter("@myNVarchar", adVarWchar, adParamInput, 10, "") .Parameters.Append .CreateParameter("@myNText", adLongVarWChar, adParamInput, Len(titleString)) .Parameters.Item("@myNText").AppendChunk titleString ' note the difference in these - without the {} the string implicitly converts ' the adVarChar version is of course commented out '.Parameters.Append .CreateParameter("@myGuid", adVarChar, adParamInput, 36, "58F94A80-B839-4B35-B73C-7F4B4D336C3C") .Parameters.Append .CreateParameter("@myGuid", adGUID, adParamInput, 16, "{58F94A80-B839-4B35-B73C-7F4B4D336C3C}") Set rs = .Execute 'get column names ReDim colNames(rs.Fields.Count - 1) For i = 0 to rs.Fields.Count - 1 colNames(i) = rs.Fields.Item(i).Name Next Do While Not (rs Is Nothing) ' get initial recordset If Not rs.EOF Then ' for retrieving more than about 30 or so recordsets you would probably want to use a collection allData(UBound(allData)) = rs.GetRows(adGetRowsRest) End If ' this will be nothing if no recordset is returned Set rs = rs.NextRecordset ' resize array if needed If Not (rs Is Nothing) Then ReDim Preserve allData(UBound(allData) + 1) Loop ' must release the recordset before retrieving output parameters and/or the return value ReleaseObj rs, True, True ret = CStr(.Parameters.Item("RETURN").Value) End With ReleaseObj cmd, False, True ReleaseObj conn, True, True ' show stored procedure proc = GetStoredProcedureDefinition(StoredProcedure) With Response outputNamedGetRowsArray allData, colNames .Write "<br />" .Write "Return Value: " & ret & "<br /><br />" .Write "<pre>" & proc & "</pre>" End With displayAspFile Server.MapPath("adodb.command3.asp") Response.Write "</div></body></html>" %> 
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值