2011-05-28 100 views
0

「圖像」 SQL列我有一個包含有「圖像」式柱的表的數據庫: Management Studio Screncap評估在查詢

此列實際上包含編碼爲HEX字節值的長字符串。

我需要選擇由此列編碼的字符串包含特定子字符串的所有記錄。僞代碼將是:

Select * 
From SomeTable 
Where dataColumnofTypeImage.ToString().Contains("somesubstring") 

我嘗試使用要做到這一點Linq中(LinqPad):

from z in Zanus 
let p = z.Udata.ToArray() // z.Udata will be of type System.Linq.Binary so I want to  make a byte array out of it... 
where System.Text.ASCIIEncoding.ASCII.GetString(p).Contains("EXED") 
select new 
{ 
    z.Idnr, 
    z.Udatum, 
    z.Uzeit, 
    z.Unr, 
    z.Uart, 
    z.Ubediener, 
    z.Uzugriff, 
    z.Ugr, 
    z.Uflags, 
    z.Usize, 
    z.Udata 
} 

但是,這並不在所有的工作說:

NotSupportedException異常:方法「字節] ToArray()'沒有支持到SQL的轉換。

我簡直不敢相信這是不可能的檢查二進制數據類型在WHERE子句中,就像我可以檢查一些其他的數據類型...

有人可以幫我在這裏?

+0

你會期望ToString表示看起來像什麼?我期望'System.Linq.Binary'或二進制數據的字符解釋,而不是二進制數據本身,所以即使它編譯你的代碼仍然是錯誤的。 – 2011-05-28 23:24:02

+0

您是否試過PatIndex而不是Contains? http://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions.patindex.aspx – hsmiths 2011-05-28 23:31:16

+0

@Ed @shsmith問題不在於字符串操作本身。我似乎無法首先從列中獲取數據。請檢查我的評論下面的示例數據,其人類可讀的代表性和我有的問題。 – Kris 2011-05-29 08:33:57

回答

0

我知道這樣做的唯一方法的代碼是使用直接的SQL和子串

例如,像:

string str1 = @" 
    select 
     Idnr, 
     Udatum, 
     Uzeit, 
     Unr, 
     Uart, 
     Ubediener, 
     Uzugriff, 
     Ugr, 
     Uflags, 
     Usize, 
     Udata 
    from Zanus 
    where Udata is not null 
     and SubString(Udata, 1 , 2147483647) like '%EXED%'" ; 

    var query1 = this.ExecuteQuery<Zanus>(str1); 
    (from z in query1 
    select new 
    { 
     z.Idnr, 
     z.Udatum, 
     z.Uzeit, 
     z.Unr, 
     z.Uart, 
     z.Ubediener, 
     z.Uzugriff, 
     z.Ugr, 
     z.Uflags, 
     z.Usize, 
     z.Udata 
    }  

注意,如果搜索字符串是在一列,這將失敗,但沒有在第一2,147,483,647字節(但如果這些是圖像,我不認爲這應該是一個問題)。

+0

感謝你...我會給它一個明天再試。 – Kris 2011-05-30 22:55:51

+0

非常感謝您的建議。 SQL查詢很快返回了我期待和需要的那些記錄。使它在Linq中運行有一些問題,但這是語法和缺少的括號或;這裏和那裏。真的最有幫助! – Kris 2011-06-01 16:05:56

0
where p.Contains(System.Text.ASCIIEncoding.ASCII.GetString("EXED")) 

這大概是你想要做什麼,它是否奏效,將取決於你的形象串

+0

沒有用。一個例子:'code'0x3200001000000000000000200B00000012FF000003000000343000000000703000000033000000040000000000A841340000000400000000C07F4435000000040000000000A041FE010000040000009825E53B000000400E00000000FE000006000000454B47443600000000F000000000'code'其中goves'code' 2 ____? ???????????? 40 ???? P0 ??? 3 ?????????? A4 ?????????? D5 ?????? ????????????&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&>在EKGD部分。然而,我得到一個錯誤'code'NotSupportedException:方法'字節[] ToArray()'沒有支持轉換爲SQL.'code'它驅使我堅果... – Kris 2011-05-29 08:27:33