Siore.com
Video tutorials zu ASP.NET

Insert File INTO SQL Server

February 2, 2008 10:55 by fstrahberger

Es kommt immer mal wieder vor, dass Dateien in einer Datenbank gespeichert werden müssen. Am einfachsten kann man die Anforderung mit einem kleinen VBScript realisieren. Der Windows Scripting Host ist auf allen aktuellen Windows-Installationen vorhanden und das Skript kann mit Notepad erstellt werden. Für das Beispiel verwende ich ein SQL Server Express Datenbankfile (*.mdf).

Zunächst braucht man ein Image-Feld in der Tabelle:

CREATE TABLE MyTable
(
 ID int NOT NULL,
 Title varchar(50) NOT NULL,
 BinObject image NULL,
)

Anschließend kann man die erste Datei (im Beispiel ist das ein PDF-Dokument) in die Tabelle eintragen:

Dim strCon
strCon = "Driver={SQL Native Client};Server=.\SQLExpress;AttachDbFilename=" & GetScriptPath & "\mydb.mdf; Database=dbname;Trusted_Connection=Yes;"

'-----------------------------------------------------------------
' Open connection
'-----------------------------------------------------------------
Dim oCon: Set oCon = WScript.CreateObject("ADODB.Connection")
Dim oRs: Set oRs = WScript.CreateObject("ADODB.Recordset")
oCon.Open strCon

Dim strSQL: strSQL = "SELECT * FROM MyTable where 1 = 2"
oRs.Open strSQL, oCon, 0, 3

oRs.AddNew
oRs.Fields("ID") = 1
oRs.Fields("Title") = "Hello World"
oRs.Fields("BinObject") = ReadFile(GetScriptPath & "\cvs.pdf")

oRs.Update
oCon.Close
Set oRs = Nothing
Set oCon = Nothing

WScript.Echo "Done"

'---------------------------------------------------------
' Read file content into byte array
'---------------------------------------------------------
Function ReadFile(strFileName)
 Const adTypeBinary = 1
 Dim bin: Set bin = CreateObject("ADODB.Stream")
 bin.Type = adTypeBinary
 bin.Open
 bin.LoadFromFile strFileName
 ReadFile = bin.Read
End Function

'---------------------------------------------------------
' Get script path top avoid hard coding of paths
'---------------------------------------------------------
Function GetScriptPath()
 Dim strPath: strPath = Wscript.ScriptFullName
 Dim oReg: Set oReg = New RegExp
 oReg.Pattern = Wscript.ScriptName & "$"
 strPath = oReg.Replace( strPath, "" )
 GetScriptPath = strPath
End Function

Zum Schluss sollte man noch testen, ob die Datei auch richtig angekommen ist. Dazu lese ich den Datensatz und speichere die Datei im aktuellen Verzeichnis wieder als PDF-Dokument.unter einem anderen Namen:

Dim strCon
strCon = "Driver={SQL Native Client};Server=.\SQLExpress;AttachDbFilename=" & GetScriptPath & "\mydb.mdf; Database=dbname;Trusted_Connection=Yes;"

'-----------------------------------------------------------------
' Open connection
'-----------------------------------------------------------------
Dim oCon: Set oCon = WScript.CreateObject("ADODB.Connection")
Dim oRs: Set oRs = WScript.CreateObject("ADODB.Recordset")
oCon.Open strCon

Set oRs = oCon.Execute("SELECT * FROM MyTable WHERE ID = 1")
While Not oRs.EOF
 WScript.Echo "Extracting: " & oRs.Fields(0).Value & " - " & oRs.Fields(1).Value
 SaveToFile GetScriptPath & "\pdf_from_db.pdf", oRs
 oRs.MoveNext
Wend
oCon.Close
Set oRs = Nothing
Set oCon = Nothing

WScript.Echo "Done"

'----------------------------------------------------------------
' Store database content as file
'----------------------------------------------------------------
Function SaveToFile(strFileName, oRs)
 Const adTypeBinary = 1
 Dim bin: Set bin = CreateObject("ADODB.Stream")
 bin.Type = adTypeBinary
 bin.Open
 bin.Write oRs.Fields("BinObject")
 bin.SaveToFile strFileName, 2
End Function

'---------------------------------------------------------
' Get script path top avoid hard coding of paths
'---------------------------------------------------------
Function GetScriptPath()
 Dim strPath: strPath = Wscript.ScriptFullName
 Dim oReg: Set oReg = New RegExp
 oReg.Pattern = Wscript.ScriptName & "$"
 strPath = oReg.Replace( strPath, "" )
 GetScriptPath = strPath
End Function

Source: Insert File Into SQL Server


Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (2) | Comment RSSRSS comment feed

Oracle auf XUbuntu

January 7, 2008 16:41 by fstrahberger

Da ich in nächster Zeit wieder mehr mit Oracle arbeiten werde, habe ich beschlossen mir eine aktuelle Testumgebung als VMWare-Image anzulegen. Als Datenbankserver verwende ich Oracle 11g auf XUbuntu.

Das Video zeigt die Installation von XUbuntu als VMWare-Image. Anschließend installiere ich Oracle 11g. Zum Schluss erstelle ich noch ein Startskript zum Hochfahren der Datenbank.

Video1 (Ubuntu) Oracle auf XUbuntu
 (2.733 KB)

Video2 (Oracle) Oracle auf XUbuntu (7.202 KB)
Source Oracle auf XUbuntu
 (2 KB)

Hier folgt eine Kurzanleitung zur Oracle-Installation:
  
Installation einiger zusätzlicher Pakete:
sudo apt-get update
sudo apt-get install gcc libaio1 lesstif2 lesstif2-dev make rpm libc6 libstdc++5
  
Red Hat Linux simulieren:

sudo vi /etc/redhat-release
Red Hat Enterprise Linux AS release 3 (Taroon)

  
Kernel Parameter anpassen
sudo vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
sudo /sbin/sysctl –p
  
User Beschränkungen anpassen:
sudo nano /etc/security/limits.conf
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
  
Oracle Gruppen und Benutzer anlegen:
sudo groupadd oinstall
sudo groupadd dba
sudo groupadd nobody
sudo useradd -m oracle -g oinstall -G dba -s /bin/bash
sudo passwd oracle
  
Links für Installer anlegen:
sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /usr/bin/rpm /bin/rpm
sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
sudo ln -s /usr/bin/basename /bin/basename
sudo mkdir /oraclesudo 
mkdir /oracle/11gsudo 
chown -R oracle:oinstall /oracle
sudo chmod -R 775 /oracle  
  
/etc/profile erweitern:
sudo vi /etc/profile
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/11g
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH:.
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
Installation starten:
sudo mv /home/florian/Desktop/linux*.zip /home/oracle
sudo chown oracle:oinstall /home/oracle/linux*.zip
sudo chmod 775 /home/oracle/linux*.zip
su – oracle
unzip linux_11gR1_database.zip
rm linux_11gR1_database.zip
/home/oracle/database/runInstaller

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (1) | Comment RSSRSS comment feed

Performanceverbesserung bei Oracle

December 14, 2007 21:47 by fstrahberger

Seite meinem letzten Eintrag ist schon eine längere Zeit vergangen. Ich war etwas im Stress und bin deshalb zu wenig gekommen. Ab jetzt versuche ich wieder regelmäßig neue Einträge zu verfassen.

Der heutige Beitrag beschäftigt sich mit der Performance beim Zugriff auf Oracle-Datenbanken mit ADO. Das man Bind-Variablen einsetzen sollte, ist wahrscheinlich schon bekannt. Das Beispiel zeigt, dass der Einsatz von Bindvariablen die Laufzeit halbieren kann.

 

Ist das immer noch zu langsam, dann kann man die Laufzeit bei Mengenoperationen einfach auf ein Zehntel. verkürzen. Die folgende Tabelle stellt die Laufzeiten bei unterschiedlichen Mengen dar:

Anzahl (insert/update)

ADO

ADO (Bindvariablen)

OO4O

10

0,08

0,03

0,08

100

0,78

0,36

0,14

1000

8,31

3,54

0,68

10000

113,44

40,93

10,04

Die Werte zeigen natürlich nur eine Tendenz an und sind je nach Serverkonfiguration unterschiedlich. Die deutliche Verbesserung beim Einsatz von OO4O wird dadurch bedingt, dass nur ein Roundtrip zum Server erfolgt.

 

Im beiliegenden Quellcode sind einige SQL-Statements um eine Beispieltabelle, eine Sequence und einen Trigger zu erstellen.

Source Performanceverbesserung bei Oracle (671 KB)


Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (4) | Comment RSSRSS comment feed

SELECT TOP - FOR XML

October 31, 2007 23:00 by fstrahberger

Im heutigen Video zeige ich zwei nützliche Features des SQL Server. Als erstes werde ich mit SELECT TOP die Ergebnismenge einschränken, die durch ein SELECT-Statement geliefert wird. Im Beispiel will ich nur die 15 teuersten Produkte der Nordwind-Datenbank sehen.

Das zweite Beispiel zeigt wie einfach man Datenbankinhalte in ein XML-Dokument exportieren kann. Dazu verwende ich die Option FOR XML.

Video
SELECT TOP - FOR XML (7.878 KB)
Source
SELECT TOP - FOR XML (671 KB)


Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (1) | Comment RSSRSS comment feed

Guids in VB.NET, VBScript und Java 5

October 26, 2007 12:06 by fstrahberger

Man braucht Sie doch immer mal wieder GUIDs:

VB.NET
System.GUID.NewGuid().ToString()

VBScript
WScript.Echo createGuid()
Function createGuid()
   Set TypeLib = CreateObject("Scriptlet.TypeLib")
   tg = TypeLib.Guid
   createGuid = Left(tg, len(tg)-2)
   Set TypeLib = Nothing
End Function

Und aus gegebenen Anlass - Java
import java.util.UUID;
UUID.randomUUID().toString();

So jetzt kann ich es mir hoffentlich endgültig merken!


Currently rated 3.0 by 1 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Hello Silverlight

October 24, 2007 14:19 by fstrahberger

In dem Video zeige ich wie man eine Silverlight-Textbox erstellt und bei einem Klick animiert. Das Beispiel ist ziemlich identisch zu dem Getting Started-Video auf der Silverlight Homepage.

Da es aber auf Deutsch und in Visual Basic ist, kann der eine oder andere vielleicht dennoch etwas damit anfangen. Als Entwicklungumgebung verwende ich VS 2008, Expression Blend und Silverlight 1.1.


Video Hello Silverlight (3.866 KB)
Source
Hello Silverlight (25 KB)


Currently rated 4.5 by 2 people

  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Anzeige von Datensätzen in Echtzeit

October 18, 2007 06:45 by fstrahberger

In manchen Fällen ist es notwendig Daten auch auf Webseiten zeitnah anzuzeigen. Evtl. möchte man eine Anwendung oder einen Prozess überwachen, dann genügt es nicht wenn der Mitarbeiter jede Stunde einmal auf die F5-Taste fällt.

Das Video zeigt wie, man sofort die neue Datensätze aus einer SQL Server-Datenbank mit einem Timer und einem Update Panel in „Echtzeit“ anzeigen kann.

Video Datenanzeige in Echtzeit (7.172 KB)
Source Datenanzeige in Echtzeit (181 KB)


Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (1) | Comment RSSRSS comment feed

Ein Custom Validator

October 6, 2007 04:16 by fstrahberger

Manchmal muss man die Eingaben eines Feldes in Abhängigkeit von anderen Eingaben prüfen. Dazu reichen die mitgelieferten Validator-Steuerelemente des .NET-Framework nicht aus.

Deshalb zeige ich in dem Video wie man einen Custom Validator erstellt. Der Validator stellt sicher, dass mindestens ein von zwei möglichen Feldern gefüllt ist.

Video Ein Custom Validator (6.017 KB)
Source Ein Custom Validator (3 KB)


Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

TreeView zur Navigation in Datensätzen

September 27, 2007 23:16 by fstrahberger

Vor kurzem wurde ich gefragt ob man ein TreeView-Steuerelement zur Anzeige von Datensätzen aus einer Tabelle verwenden kann. Zusätzlich soll eine Klick auf eine TreeNode den ausgewählten Datensatz in einem DetailsView anzeigen.



Ausgangspunkt ist der Quellcode den ich im Video 065_tree_db erstellt habe. Dort wird das Ergebnis einer SQL-Abfrage mit „For XML“ in ein XML-Dokument umgewandelt und kann dann als Datenquelle für ein TreeView verwendet werden.

Video TreeView zur Navigation in Datensätzen (3.741 KB)
Source TreeView zur Navigation in Datensätzen (668 KB)


Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Outlook und SMTP

September 27, 2007 01:06 by fstrahberger

Heute sollte ich die Email-Adresses zu jedem Alias aus Outlook (bzw. Exchange) ermitteln. Eigentlich dachte ich, das kann (dank Intellisense und VBA) nur eine Kleinigkeit sein. Ich hatte auch gleich die Eigenschaft ".Address"  der AddressEntries gefunden. Aber das war leider nicht die SMTP-Adresse. Nach einiger Zeit habe ich dann bei google den passenden Quellcode gefunden:

Sub GetSmtp()
     ' Konstante zum Auslesen der SMTP-Adresse
     Const g_PR_SMTP_ADDRESS_W = &H39FE001F
     Set moApp = GetObject(, "Outlook.Application")
     Set moNS = moApp.GetNamespace("MAPI")
     Set moCDO = CreateObject("MAPI.Session") 
    moCDO.Logon "", "", False, False 
    ' Ermitteln aller Adressen aus der "Globalen Adressliste"
     Dim oAEntries As MAPI.AddressEntries
     Dim oAEntry As MAPI.AddressEntry
     Set oAEntries = & _ 
moCDO.AddressLists.Item("Global Address List").AddressEntries
     ' Ermitteln des Alias-Namen und der SMTP-Adresse
     For i = 1 To oAEntries.Count
        Set oAEntry = oAEntries.Item(i)
        Dim oAlias: Set oAlias = oAEntry.Fields(CdoPR_ACCOUNT)
        ' Nur Email-Accounts ausgeben
        If oAEntry.DisplayType = olUser Then
            strAddress = oAEntry.Fields(g_PR_SMTP_ADDRESS_W).Value
            Debug.Print oAlias
            Debug.Print strAddress
        End If
    Next
End Sub 

Ein kleiner Hinweis zum Schluss: über Extras -> Verweise muss die "Microsoft CDO 1.21 Library" eingebunden werden.


Currently rated 3.0 by 2 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed