2012-11-01 58 views
0

對不起,因爲我是C#的新手,所以提出一個愚蠢的問題。如何將字符串數據類型轉換爲SQL的varbinary等效數據類型?

當前正在使用OLEDB在c#中執行任務。這個場景是,我想插入一個包含用戶名,密碼等信息的表中。數據庫是SQL Server。列Pasword有一個數據類型varbinary(100)。

我想從字符串數據類型傳遞到SQL的varbinary等效數據類型。我試了一下,但沒有成功。

最初我只是用reader.GetString(5)試過。但例外,我得到的是:

"Specified cast is not valid." 

*我忘了下面的事情提到*

讀者我採用的是OleDbDataReader。

oleParameter[7] = new OleDbParameter("@Password", OleDbType.VarBinary, 100); 
oleParameter[7].Value = reader1.GetBytes(5); 

(在這裏,我從一個表中讀取並插入到另一個表。)

請幫助我。

謝謝。

回答

0

我得到了解決。

而不是寫下面的代碼行,

oleParameter[7] = new OleDbParameter("@Password", OleDbType.VarBinary, 100); 
oleParameter[7].Value = reader1.GetBytes(5); 

我只是試圖像下面的代碼:

byte[] array = (byte[])reader1.GetValue(9); 
    oleParameter[7] = new OleDbParameter("@Password",array); 

我沒有指定的數據類型爲這個領域和所使用的構造器OleDbParameter(串名稱,對象值)。

它工作正常。

感謝Khellang和ErenErsönmez的迴應。

0

您需要發送/接收您的應用程序和varbinary列之間的字節。一旦你的字節數組回來,你可以將其轉換爲字符串:

var bytes = reader.GetBytes(5); 
var myString = Encoding.UTF8.GetString(bytes); // use the same encoding used 
               // to create the bytes 
               // when saving to the DB. 

要字符串轉換爲字節數組:

var bytes = Encoding.UTF8.GetBytes(myString); 
0

我只是想補充一點解釋,爲什麼reader.GetBytes(5)不起作用。我以前自己遇到過這個問題。

爲了使其正常工作,該特定字段在其中不會遇到任何空值。

在嘗試執行.GetBytes(5)操作之前,可以使用IsDBNull(reader(5))語句測試該值。

只是FYI!

相關問題