0

なぜこれが起こっているのか理解できません...

次のコードがあります。

        var connection = new Connection();
        connection.CursorLocation = CursorLocationEnum.adUseClient;
        connection.ConnectionString = GetOdbcConnectionString(connectionString);
        connection.Open();

        var rs = new Recordset();
        rs.CursorType = CursorTypeEnum.adOpenStatic;
        rs.CursorLocation = CursorLocationEnum.adUseClient;
        rs.LockType = LockTypeEnum.adLockBatchOptimistic;
        // this issues the SQL SELECT * FROM Test
        rs.Open("SELECT * FROM Test", connection); 
        rs.ActiveConnection = null;
        rs.Close();
        rs = null;

        var rs2 = new Recordset();
        rs2.CursorType = CursorTypeEnum.adOpenStatic;
        rs2.CursorLocation = CursorLocationEnum.adUseClient;
        rs2.LockType = LockTypeEnum.adLockBatchOptimistic;

        /* this doesn't output the expected SQL...it outputs:
declare @p1 int
set @p1=180150003
declare @p3 int
set @p3=4
declare @p4 int
set @p4=1
declare @p5 int
set @p5=-1
exec sp_cursoropen @p1 output,N'SELECT * FROM Test',@p3 output,@p4 output,@p5 output
select @p1, @p3, @p4, @p5

*/

        rs2.Open("SELECT * FROM Test", connection);

rs2 を開く前に手動で実行Marshal.ReleaseComObject(rs)すると、2 番目のレコードセットは、カーソルを使用せずに最初のレコードセットと同じ単純な SQL を発行します。最初のrsから何かがぶら下がっているに違いありません....しかし、接続とレコードセットのすべてにOpenStaticとUseClientが設定されている場合、何が、なぜ、またはなぜそれがカーソルの使用を引き起こしているのかわかりません。

4

1 に答える 1

0

これに長い間頭をぶつけた後、ついに問題が見つかりました:

DRIVER={SQL Server};

に変更する必要があります

Provider=SQLOLEDB;
于 2013-04-03T16:48:30.317 に答える