四月 08

這幾天無意間發現Oracle官方也支援Linq to Oracle了

雖然還是測試版,不過至少踏出了第一步了吶

下載的名稱為:
32-bit Oracle Data Access Components (ODAC)
for Microsoft Entity Framework and LINQ to Entities 

想嘗鮮的朋友可以先玩看看

參考資料:
Tutorial. Entity Framework, LINQ and Model-First for the Oracle Database





三月 15

XDocument是Linq所提供的一個關於XML的類別
但有的時候我們所使用的方法要求傳入的是XmlDocument
但是在傳入之前,我們想要針對這個XML檔案做一些處理後,再傳進去
這時候就可以利用XDocument,經由Linq處理後,再轉成XmlDocument丟進去
註:用了Linq to XML,終於可以離開之前寫XML相關處理的惡夢,Linq真是個好東西

話不多說了,直接來看程式吧

using System.Xml.Linq;
XDocument XDoc = XDocument.Load(Log4NetConfigXMLFilePath);
var nodes = (from p in XDoc.Elements("log4net")
                  .Elements("appender")
                  .Elements("file")
             elect p).FirstOrDefault();
//使用Linq Select出來後,進行處理
nodes.SetAttributeValue("value",HttpContext.Current.Server.MapPath("~/") + 
                                 nodes.Attribute("value").Value);
//轉出來後再放到XmlDocument
System.Xml.XmlDocument XmlDoc = new System.Xml.XmlDocument();
//把XDocument轉成XmlDocument
XmlDoc.LoadXml(XDoc.Document.ToString());




七月 16

有了LINQ後,要濾出我們想要副檔名的檔案,真的蠻簡單的

花了一些時間寫了一個副程式,有需要的朋友可以拿去使用

如果你需要遞迴尋找的話(即該目錄下的所有子目錄也要找),把第3參數帶True進去即可

程式使用方式請看下面

'使用方式(只找1層)
Dim files As List(Of FileInfo) = _
GetPathFile(txt_batch_patch.Text, New String() {".png", ".jpg"})

lst_filename.Items.Clear()

For Each s As FileInfo In files
    lst_filename.Items.Add(s.Name)
Next

'使用方式(遞迴尋找)
Dim files As List(Of FileInfo) = _
GetPathFile(txt_batch_patch.Text, New String() {".png", ".jpg"}, True)

lst_filename.Items.Clear()

For Each s As FileInfo In files
    lst_filename.Items.Add(s.Name)
Next

.
.

完整的副程式如下

    '''
''' 取得目錄下副檔名為特定格式的檔案
    '''
    '''起始目錄
    '''要尋找的副檔名
    '''是否要尋找子目錄(預設值為不尋找子目錄)
    ''' List(Of FileInfo)
    '''
    Private Function GetPathFile(ByVal DirPath As String, _
                                 ByVal file_extension As String(), _
                                 Optional ByVal IsRecursive As Boolean = False) _
                                 As List(Of FileInfo)

        '取得目錄下所有的資料夾
        Dim DirectoryPath As New List(Of String)
        DirectoryPath = My.Computer.FileSystem.GetDirectories(DirPath).ToList
        Dim Files As New List(Of FileInfo)

        If IsRecursive = True Then
            For Each DirName As String In DirectoryPath
                If System.IO.Directory.Exists(DirName) Then
                    '讓程式不要停止回應
                    Application.DoEvents()
                    '如果存在下一層的資料夾就遞迴呼叫
                    Files.AddRange(GetPathFile(DirName, file_extension, IsRecursive))
                End If
            Next
        End If

        DirectoryPath.Add(DirPath)
        For Each DirStr As String In DirectoryPath

            '取得目錄下所有的檔案名稱(String)
            Dim myFiles = From s In My.Computer.FileSystem.GetFiles(DirStr)

            '先把檔案名稱轉成FileInfo
            Dim f As New List(Of FileInfo)
            For Each s As String In myFiles
                f.Add(My.Computer.FileSystem.GetFileInfo(s))
            Next

            '使用LINQ來取出我們要的資料(副檔名包含在ImageExtension()裡面的)
            Dim files_filter As IEnumerable(Of FileInfo) = _
            From s In f _
            Where file_extension.Contains(s.Extension.ToLower)

            Files.AddRange(files_filter.ToList)

        Next

        Return Files

    End Function




四月 08

在以前如果要找出某個資料夾下的特定檔案可能要寫一大串指令

現在有了 LINQ 只能說是一整個輕鬆呀

利用 LINQ 類似 SQL 的指令方式,來取得特定的檔案名稱,就像是在下 SQL 一樣簡單

直接看程式碼比較快

        '取得目錄下所有的檔案名稱(String)
        Dim Dir As String = "C:\"
        Dim myFiles = From s In My.Computer.FileSystem.GetFiles(Dir)

        '要濾出來的副檔名
        Dim ImageExtension() As String = {".jpg", ".jpeg", ".bmp", ".png"}

        '先把檔案名稱轉成FileInfo
        Dim f As New List(Of FileInfo)
        For Each s As String In myFiles
            f.Add(My.Computer.FileSystem.GetFileInfo(s))
        Next

        '使用LINQ來取出我們要的資料(副檔名包含在ImageExtension()裡面的)
        Dim studno = From s In f Where ImageExtension.Contains(s.Extension.ToLower) Select s.Name, s.FullName

        '把找到的檔名顯示出來
        For Each sno In studno
            Debug.Print(sno.FullName)
        Next




四月 01

原理很簡單,就是先把圖檔轉成二進位再上傳就行了

程式碼如下

Dim db As New StudnoListDataContext

'把要更新的資料Select出來
Dim StudClass = (From s In db.Stud Where s.stud_no = studno.Text).First
'把PictureBox.Image放到Bitmap
Dim bmp As Bitmap = PictureBox1.Image
'宣告一個MemoryStream
Dim st As New MemoryStream
'把圖片放到MemoryStream裡面
bmp.Save(st, System.Drawing.Imaging.ImageFormat.Jpeg)
st.Position = 0

'把MemoryStream裡的資料轉成二進位
Dim WriteByte(st.Length - 1) As Byte
If st.CanRead Then
      st.Read(WriteByte, 0, st.Length)
      st.Close()
End If

'把WriteByte放到Linq的二進位欄位
StudClass.studimg = WriteByte
'更新上去
db.SubmitChanges()




二月 12

ADO.Net Data Service 微軟大都是與 ADO.NET Entity Model來搭配使用

不過我還是習慣用LINQ to SQL 的DBML(不過使用此方法有些缺點,後面再提)

首先會遇到的第一個問題就是Data Service發生錯誤不會顯示相關訊息

解決這問題的方法就是把下面這行加到Data Service的Class上面就會顯示錯誤訊息了

繼續閱讀… »