2013-06-24 240 views
0

我已經在過去使用這樣的代碼從一個CLR存儲過程返回數據:從CLR返回表存儲過程

SqlCommand command = new SqlCommand("select * from accounts", connection) 
SqlDataReader r = command.ExecuteReader(); 
SqlContext.Pipe.Send(r); 

我現在要使用ODBC訪問Sybase ASE數據庫(這樣,而比使用SqlCommand我會使用OdbcCommand與OdbcConnection)。我可以使用OdbcDataReader來獲取結果集,但是這不能被送入SqlContext.Pipe。

是否存在與SqlContext等效的Odbc,或者任何人都可以告訴我如何返回結果集。

回答

0

據我所知,發送並非源自上下文連接的結果的唯一方法是構建一個新的結果集元數據對象,然後逐行發送一行。

喜歡的東西:

private static void sendResultsetRecords(SqlDataReader dataReader) 
    { 
     SqlMetaData[] meta = createMetaDataForResultset(dataReader); 

     SqlContext.Pipe.SendResultsStart(new SqlDataRecord(meta)); 
     sendEachRecordOfData(dataReader, meta); 
     SqlContext.Pipe.SendResultsEnd(); 
    } 

您可以找到tSQLt.ResultsetFilter方法是tSQLt database unit testing framework for SQL Server的一部分,完整的實現。

相關的代碼開始在這個文件的第56行:http://sourceforge.net/p/tsqlt/code/HEAD/tree/tSQLtCLR/tSQLtCLR/ResultSetFilter.cs#l56

+0

謝謝,我會看看這個。 –

+0

我不得不將一些函數更改爲ODBC類型而不是SQL Server,但已經完成了它的工作。 –