Tipp-Upload: VB.NET 0420: Daten in eine SQLServer Compact DB eintragen
von Bernhard Döbler
Über den Tipp
Dieser Tippvorschlag wird übernommen.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Datenbanken und XML
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
SQL Server Compact, Prepared Statement
Der Vorschlag wurde erstellt am: 19.11.2011 22:02.
Die letzte Aktualisierung erfolgte am 22.09.2017 17:57.
Beschreibung
Dieses Programmbeispiel liest MP3-Dateien aus einem konfigurierbaren Pfad aus und trägt Metadaten wie Name, Größe und MD5-Hash in eine eine Datenbank des Microsoft SQLServers vom Typ Compact ein. Über SQL-Statements kann man z.B. aus dem Management Studio heraus Dubletten (gleiche Größe, gleicher Hash) finden Kompiliert wird das Ganze gg. das .NET Framework 4
Schwierigkeitsgrad |
Verwendete API-Aufrufe: |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird. ' In den Zip-Dateien ist er jedoch zu finden. ' --------- Anfang Projektdatei SQLCompact001.vbproj --------- ' ------------------ Anfang Datei Form1.vb ------------------ Imports System.Data.SqlServerCe Imports System.IO Imports System.Text Imports System.Security.Cryptography ' Query um dubletten zu finden: ' select a.anz, a.size, d.pfad, d.name ' from (SELECT size, md5, count(size) anz ' FROM dateien ' group by size,md5 ' having count(size)>1 ' ) a ' inner join dateien d ' on d.size=a.size ' and d.md5=a.md5 ' order by a.anz desc, a.size desc, d.pfad, d.name; Public Class Form1 Private strFilePath As String = "E:\MP3\MP3_Musicload" Private strDBPath As String = "d:\Reporting.Database.sdf" Private strDBPWD As String = "pwd" Private strConn As String = String.Format("Data Source={0};Password=""{1}"";", New _ String() {strDBPath, strDBPWD}) Private strConnCreate As String = String.Format("{0}LCID=1031;Encrypt = TRUE;", strConn) Private strConnConn As String = String.Format("{0}Persist Security Info=False;", strConn) Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim bCreateDB As Boolean = False Try If CheckBox1.Checked Then bCreateDB = True End If If bCreateDB Then If My.Computer.FileSystem.FileExists(strDBPath) Then My.Computer.FileSystem.DeleteFile(strDBPath) End If Dim engine As New SqlCeEngine(strConnCreate) engine.CreateDatabase() End If Using conn As New SqlCeConnection conn.ConnectionString = strConnConn conn.Open() If bCreateDB Then Using cmd As New SqlCeCommand("CREATE TABLE dateien (id int PRIMARY " & _ "KEY IDENTITY, pfad nvarchar(255) NOT NULL, name nvarchar(255) " & _ "NOT NULL , size int NOT NULL, md5 nchar(32) default NULL , datum " & _ "datetime NOT NULL)", conn) cmd.ExecuteNonQuery() End Using Using cmd As New SqlCeCommand("CREATE index idxsizemd5 on " & _ "dateien(size, md5)", conn) cmd.ExecuteNonQuery() End Using Using cmd As New SqlCeCommand("CREATE index idxname on dateien(name)", conn) cmd.ExecuteNonQuery() End Using Using cmd As New SqlCeCommand("CREATE index idxpfad on dateien(pfad)", conn) cmd.ExecuteNonQuery() End Using End If Using cmd As New SqlCeCommand("insert into dateien (pfad, name, size, " & _ "md5, datum) values(@pfad, @name, @size, @md5, @datum)", conn) Dim pfadparam As New SqlCeParameter("@pfad", System.Data.SqlDbType.NVarChar) Dim nameparam As New SqlCeParameter("@name", System.Data.SqlDbType.NVarChar) Dim sizeparam As New SqlCeParameter("@size", System.Data.SqlDbType.Int) Dim md5param As New SqlCeParameter("@md5", System.Data.SqlDbType.NChar) Dim datumparam As New SqlCeParameter("@datum", System.Data.SqlDbType.DateTime) cmd.Parameters.Add(pfadparam) cmd.Parameters.Add(nameparam) cmd.Parameters.Add(sizeparam) cmd.Parameters.Add(md5param) cmd.Parameters.Add(datumparam) Dim Dir As FileInfo() = New DirectoryInfo(strFilePath).GetFiles( _ "*.mp3", SearchOption.AllDirectories) Using trans As SqlCeTransaction = conn.BeginTransaction() For Each datei As FileInfo In Dir Try pfadparam.Value = datei.DirectoryName nameparam.Value = datei.Name sizeparam.Value = datei.Length datumparam.Value = datei.LastWriteTime Using fstream As FileStream = New FileStream(datei.FullName, _ FileMode.Open, FileAccess.Read, FileShare.Read) Dim hash() As Byte = New MD5CryptoServiceProvider( _ ).ComputeHash(fstream) Dim sb As New StringBuilder(hash.Length * 2) For Each hex As Byte In hash sb.Append(hex.ToString("X2")) Next md5param.Value = sb.ToString End Using cmd.ExecuteNonQuery() Catch ex As Exception Debug.Print(datei.FullName & " nicht bearbeitet") End Try Next trans.Commit() End Using End Using conn.Close() End Using Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class ' ------------------- Ende Datei Form1.vb ------------------- ' ---------- Ende Projektdatei SQLCompact001.vbproj ----------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.