Sql-Server

我想在 MySQL 5.6 版中模擬 Microsoft SQL Server 函式 GetSqlBinary()

  • August 4, 2021

我想在 MySQL 5.6 版中模擬 Microsoft SQL Server 函式 GetSqlBinary()。C# 命名空間 System.Data.SqlClient 實現了 GetSqlBinary(),這就像獲取一個 blob。但是 C# 命名空間 MySql.Data.MySqlClient 沒有實現 GetSqlBinary()。因此,似乎不同之處在於 GetSqlBinary 為您提供了一個字節數組形式的數據塊,而 GetSqlBytes 類似但將數據儲存在緩衝區中,該緩衝區允許您以流的形式與底層數據進行互動。下面是 GetSqlBinary() 的定義:

GetSqlBinary 返回一個 SqlBinary 結構:表示要儲存在數據庫中或從數據庫中檢索的可變長度的二進制數據流。

GetSqlBytes 返回一個 SqlBytes 類: 表示一個可變引用類型,它封裝了一個 Buffer 或一個 Stream。

請建議一種在 MySQL 中執行函式 GetSqlBinary() 的方法。謝謝你。坦率

我不太明白您遇到的問題 - 讓我解釋一下原因。該類SqlBinary只是 a 的一個包裝器,byte[]它向它添加了一些對程序員友好的方法和屬性。但在底層它只是一個字節數組。您可以通過查看這裡的原始碼來找到它:

http://referencesource.microsoft.com/#System.Data/System/Data/SQLTypes/SQLBinary.cs,2cc17fbd58a1a375

此外,您可以在SqlDataReader此處查看該類的原始碼:

http://referencesource.microsoft.com/#System.Data/System/Data/SqlClient/SqlDataReader.cs,e46454446a9e2777

簡而言之,它只是獲取欄位的值,將其轉換為 abyte[]並從中構造一個新SqlBinary值。沒有什麼能阻止您做同樣的事情或自己實施它。哎呀,如果你實現了一個MySqlBinary類,如果你願意,你甚至可以將它作為對庫的增強送出,我敢肯定你不是唯一喜歡它的人。

簡而言之,這樣做:

var binary = (byte[])reader.GetValue(i);

幾乎是你真正需要的一切。

引用自:https://dba.stackexchange.com/questions/129139