1

SQL Server 2008 で SQL を実行すると、問題なく動作します。ただし、従来の ASP Web ページに追加してそこから呼び出すと、壊れているように見えます。何が欠けているのかわからないのですか?

sql = ""
sql = sql & " DECLARE @listStr VARCHAR(MAX)"

sql = sql & " DECLARE @temp TABLE ("
sql = sql & " DistID varchar(30),"
sql = sql & " FName varchar(30),"
sql = sql & " LName varchar(30),"
sql = sql & " RankID int, "
sql = sql & " PSV int,"
sql = sql & " ShipCountry varchar(30),"
sql = sql & " ShipState varchar(30) )"

sql = sql & " INSERT INTO @temp"
sql = sql & " EXEC  [dbo].[MSGGetList]"
sql = sql & " @List = N'" & request("report_type") & "',"
sql = sql & " @DistID = " & Session("DistributorID") & ","
sql = sql & " @BusCtrID = 1,"

' Autoship Filter Params
If request("autoship") <> "" Then
    sql = sql & " @FilterAutoship = '" & request("autoship") & "',"
Else
    sql = sql & " @FilterAutoship = NULL,"
End If

sql = sql & " @ItemID = " & request("item_id") & ","

' Order Filter Params
If request("orders") <> "" Then
    sql = sql & " @Orders = '" & request("orders") & "',"
Else
    sql = sql & " @Orders = NULL,"
End If

If request("minvol") <> "" Then
    sql = sql & " @MinVol = " & request("minvol") & ","
Else
    sql = sql & " @MinVol = NULL,"
End If

If request("minpostamt") <> "" Then
    sql = sql & " @MinPostAmt = " & request("minpostamt") & ","
Else
    sql = sql & " @MinPostAmt = NULL,"
End If

If request("startdate") <> "" Then
    sql = sql & " @DateStart = '" & request("startdate") & "',"
Else
    sql = sql & " @DateStart = NULL,"
End If

If request("enddate") <> "" Then
    sql = sql & " @DateEnd = '" & request("enddate") & "',"
Else
    sql = sql & " @DateEnd = NULL,"
End If

' Location Filter Params
If request("country") <> "" Then
    sql = sql & " @Country = '" & request("country") & "',"
Else
    sql = sql & " @Country = NULL,"
End If

If request("region") <> "" Then
    sql = sql & " @Region = '" & request("region") & "',"
Else
    sql = sql & " @Region = NULL,"
End If

' Rank Filter Params
If request("rankid") <> "" Then
    sql = sql & " @RankID = '" & request("rankid") & "',"
Else
    sql = sql & " @RankID = NULL,"
End If

'Do Not send list
If request("DoNotSend") <> "" Then
    sql = sql & " @Exempt = '" & request("DoNotSend") & "',"
End If

' Volume Filter Params
sql = sql & " @MinPV = " & request("min_pv") & ","
sql = sql & " @MaxPV = " & request("max_pv") & ","
sql = sql & " @MinGV = " & request("min_gv") & ","
sql = sql & " @MaxGV = " & request("max_gv") & ","
sql = sql & " @MinLBVRBV = NULL"
sql = sql & " SELECT @listStr = COALESCE(@listStr+',' ,'') + DistID FROM @temp"
sql = sql & " SELECT @listStr AS ToList"
stop
response.write(sql & "<br />")
Set rsToList = GetRecordSet(sql)


response.Write(rsToList("ToList"))

コードをステップ実行して見ると、次のように表示されrsToListます。

オブジェクトが閉じているときは操作できません

ここで何が欠けているのか分かりませんか?!

編集:

Function getRecordset(strSQL)

        If Application("DebugSQL") Then
            Call WriteSQL(strSQL)
        End If

        'Create Database Connection
        Set FunctionDBConn = Server.CreateObject("ADODB.Connection")
        FunctionDBConn.ConnectionTimeout = 180
        FunctionDBConn.Open(Application("DB_ConnectionString"))
        Set adoRS = Server.CreateObject("ADODB.Recordset")

        adoRS.CursorLocation = 3
        adoRS.LockType = 4

        'Create Recordset
        adoRS.Open strSQL, FunctionDBConn
        Set adoRS.ActiveConnection = Nothing
        Set GetRecordset = adoRS

        'Close Database Connection
        FunctionDBConn.Close
        Set FunctionDBConn = Nothing

    End Function
4

4 に答える 4

1

このエラーは通常、SQLバッチを次のステートメントで開始することで解決されます。

SET NOCOUNT ON
于 2012-07-19T21:48:08.747 に答える
1

2つの解決策があります

  • ストアド プロシージャを作成したくない場合は、次のステートメントで SQL バッチを開始します。

ANSI_WARNINGS をオフに設定

SET NOCOUNT ON
  • SQL ステートメントをストアド プロシージャ内に配置して呼び出すことができます。
于 2013-11-11T11:33:26.447 に答える
1

GetRecordSet メソッドを確認できますか?

メソッドで接続を閉じているように聞こえます。
接続を閉じる前に、レコード セットの処理が完了するまで待つ必要があります。

接続をメソッドに渡すか、メソッドの外部で閉じることができるページ レベルの変数にすることを検討してください。

于 2012-07-19T20:37:35.730 に答える