2014-01-27 105 views
0

我想使用C++查詢從SQL數據庫(SQL Server Enterprise)的列中選擇所有二進制數據。我不確定二進制數據中有什麼,它只是說。 我想這(它被傳遞到我從關學)老實說,我不是100%的明白在某些部分的代碼,因爲我評論):<Binary> in sql

SqlConnection^ cn = gcnew SqlConnection(); 
SqlCommand^ cmd; 
SqlDataAdapter^ da; 
DataTable^ dt; 
cn->ConnectionString = "Server = localhost; Database=portable; User ID = glitch; Pwd = 1234"; 
cn->Open(); 
cmd=gcnew SqlCommand("SELECT BinaryColumn FROM RawData", cn); 
da = gcnew SqlDataAdapter(cmd); 
dt = gcnew DataTable("BinaryTemp"); //I'm confused about this piece of code, is it supposed to create a new table in the database or a temp one in the code? 
da->Fill(dt); 
for(int i = 0; i < dt->Rows->Count-1; i++) 
{ 
String^ value_string; 
value_string=dt->Rows[i]->ToString(); 
Console::WriteLine(value_string); 
} 
cn->Close(); 
Console::ReadLine(); 

但它只返回了很多「的System.Data.DataRow」。

有人可以幫助我嗎?

(我需要把它變成一個矩陣的形式我提取二進制數據之後,因此,如果任何人都可以提供一部分幫助爲好,它會不勝感激!)

+0

嘗試使用預備函數或將數據庫視爲I/O流。 –

+0

我編輯過,所以它現在有它的代碼。 @ThomasMatthews你能給我一個例子嗎?或者給我一個更詳細的鏈接? – theGlitch

回答

0

dt->Rows[i]確實是一個DataRow ^ 。從中提取的特定字段,使用它的索引:

array<char> ^blob=dt->Rows[i][0]; 

這提取的第一列(僅因爲有的話),並返回它的一個數組表達。

要回答這個問題在你的代碼,SqlDataAdapter的工作方式是這樣的:

  • 你建立一個DataTable來保存數據檢索。你可以填寫它的欄目,但你不需要。你也不需要說出它的名字。
  • 你建立適配器對象,給它一個查詢和連接對象
  • 調用Fill方法適配器上,給它先前創建的DataTable,以填補任何查詢返回。
  • 您已完成適配器。此時您可以處理它(例如,如果您使用的是C#,則在using聲明中)。
+0

謝謝您的輸入!我正在使用C++。 我有兩個問題關於你說的: 1. array 應該替換String,對不對? 2.使用Item [0],我得到了一個錯誤'Item':使用'default'來訪問'System :: Data :: DataRow'類的默認屬性(索引器)' – theGlitch

+0

這是一個二進制數組,而不是字符串,但你可以使用'Encoding :: UTF8-> GetString()'得到你的字符串。我會修復第二個錯誤的代碼,這是一段時間。基本上不用' - > Item []'直接使用'[]'。 – Blindy

+0

我試過String^value_string = dt->行[i] [0] - > ToString();現在我得到一個連續的「System.Data []」。使用[]給我一個語法錯誤,所以我不認爲我完全理解你將如何實現它,對於Encoding :: UTF8-> GetString()也是如此。它表示'編碼':不是類或名稱空間名稱,'UTF8':未聲明的標識符,' - > GetString'的左側必須指向class/struct/union /泛型類型。 – theGlitch