3

私はこれを試していますがADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.、このコードの行でエラーが発生しますIf ScopeID.EOF Then

この方法を使用するために答えないでくださいCreateParam、この方法なしで解決策を探しています。ありがとう。

<%  
    set Cmd = Server.CreateObject("ADODB.Command")
    Cmd.ActiveConnection = conn

    Cmd.CommandText = "INSERT INTO TABLE (NAME) VALUES ('test')  SELECT SCOPE_IDENTITY() AS ID"
    Cmd.CommandType = 1
    Cmd.CommandTimeout = 0
    Cmd.Prepared = true

    Set ScopeID = Cmd.Execute()

    If ScopeID.EOF Then
        Response.Write "There was an Error in your request, Please try again"
        Response.End
    Else
        ID= ScopeID(0).Value
    End IF

    ScopeID.Close
    Set ScopeID = Nothing
    Set Cmd = Nothing

    Response.Write ID

%>
4

5 に答える 5

5

これを試して:

Cmd.CommandText = "SET NOCOUNT ON; INSERT INTO TABLE (NAME) VALUES ('test'); SET NOCOUNT OFF; SELECT SCOPE_IDENTITY() AS ID"

私が理解しているように、SQL Serverは、SET NOCOUNT ONによって「非表示」にされていない場合、実際の挿入ステートメントの(空の)レコードセットを返します。エラーメッセージは、接続ではなく、レコードセットが閉じられていることを示していると思います。

于 2012-04-11T07:14:27.367 に答える
3

.NextRecordSet()コマンドの後に適用すると、次のようになります。

<%  
    set Cmd = Server.CreateObject("ADODB.Command")
    Cmd.ActiveConnection = conn

    Cmd.CommandText = "INSERT INTO TABLE (NAME) VALUES ('test')  SELECT SCOPE_IDENTITY() AS ID"
    Cmd.CommandType = 1
    Cmd.CommandTimeout = 0
    Cmd.Prepared = true

    Set ScopeID = Cmd.Execute()
            ScopeID.NextRecordSet() // <---- Fix

    If ScopeID.EOF Then
        Response.Write "There was an Error in your request, Please try again"
        Response.End
    Else
        ID= ScopeID(0).Value
    End IF

    ScopeID.Close
    Set ScopeID = Nothing
    Set Cmd = Nothing

    Response.Write ID

%>
于 2012-04-14T13:56:29.140 に答える
1

最新バージョンのSQLServer(2005以降のワードだと思います)を実行している場合は、次の出力句を使用できます。

Cmd.CommandText = "insert into [dbo].[test] (name) output inserted.id values ('test')"
于 2012-04-16T08:56:22.097 に答える
0

クエリを2つの部分に分割します。

INSERT INTO TABLE (NAME) VALUES ('test'); SELECT SCOPE_IDENTITY() AS ID

に注意して;ください。クエリの2番目の部分は実行されていないと思います。

于 2012-04-10T08:04:03.900 に答える
0

接続は開いていますか?それがエラーメッセージが不平を言っていることのようです。閉じた接続に対してコマンドを実行することはできません。

于 2012-04-10T02:26:16.480 に答える