Hallo liebe Forum Nutzer,
Ich versuche schon seit einer Woche über VB ein Bild in eine ORACLE datenbank 11g zu speichern. Das Feld, in welches ich das Bild abspeichern möchte ist vom Objekt ORDSYS.ORDImage. Was ich bisher geschafft hab ist ein ORDImage-Objekt mit ORDImage.init() auf das Feld zu Instanziieren
Ich greife mit einem OleDb Treiber auf die Datenbank zu. Mein code dazu sieht auszugsweise so aus:
[highlight=vbnet]Dim oCommand As OleDb.OleDbCommand
Dim sSQL As String = "INSERT INTO tblPicture (Name, Picture, Description) VALUES (?, ORDSYS.ORDImage.init(), ?)"
oCommand = New OleDb.OleDbCommand(sSQL, Connection)
Try
With oCommand
CommandType = CommandType.Text
Dim name As OleDb.OleDbParameter = New OleDb.OleDbParameter("name", OleDb.OleDbType.Variant)
name.Value = "someName"
.Parameter.Add(name)
Dim descr As OleDb.OleDbParameter = New OleDb.OleDbParameter("descr", OleDb.OleDbType.Variant)
descr .Value = "Description"
.Parameter.Add(descr )
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.ToString, "FAIL",......)
End Try[/highlight]
So bekomme ich schon mal einen Datensatz in die Tabelle.
Jetzt möchte ich gerne das Bild in das ORDImage-Objet schreiben.
Das mache ich indem ich ein UPDATE Statement mit Parametern ausführe:
[highlight=vbnet]sSQLUpdate As String = "UPDATE tblPicture SET Picture=" & _
"ORDSYS.ORDImage(ORDSYS.ORDSource(?,?,?,?,?,?),?,? ,?,?,?,?,?)"[/highlight]
Diesen SQL String übergebe ich, wie zuvor, dem OleDbCommand und lege für die "?" folgende Parameter fest
[highlight=vbnet]
ORSYS.ORDImage(ORDSYS.ORDSource(conetent As BLOB,
srcType as varchar2,
srcLocation as varchar2,
srcName as varchar2,
updateTime as Date,
local as Number),
height as Number,
Width as Number,
ContentLength as Number,
FileFormat as Number,
ContentFormat as Number,
CompresstionFormat as Number,
MimeType as Number)[/highlight]
Der content Parameter ist ein Byte Array den ich vom Bild erstellt habe:
[highlight=vbnet]
Dim asPicture as Byte() {}
fs = New FileStream("DateiName", FileMode.Open)
fi = New FileInfo("DateiName")
Try
Dim lTemp As Long = fi.Length
Dim iLength As Integer = Convert.ToInt32(lTemp)
ReDim abPicture(iLength - 1)
fs.Read(abPicture, 0, iLength)
fs.Close()
Catch ex As Exception
m_oMessages.ShowException(ex.ToString)
End Try[/highlight]
Die Parameterübergabe für das UPDATE Statement sieht so aus:
[highlight=vbnet]
Try
sSQL = "UPDATE " & sTable & " SET PICTURE=ORDSYS.ORDImage(ORDSYS.ORDSource(?,?,?,?,? ,?),?,?,?,?,?,?,?) " & _
"WHERE ID=323"
oCommand = New OleDb.OleDbCommand(sSQL, m_oConnection)
With oCommand
.CommandType = CommandType.Text
Dim blob As OleDb.OleDbParameter = New OleDb.OleDbParameter("blob", OleDb.OleDbType.LongVarBinary)
blob.Value = abPicture
blob.Direction = ParameterDirection.Input
.Parameters.Add(blob)
Dim srcType As OleDb.OleDbParameter = New OleDb.OleDbParameter("srcType", OleDb.OleDbType.Variant)
srcType.Value = "FILE"
srcType.Direction = ParameterDirection.Input
.Parameters.Add(srcType)
Dim srcLocation As OleDb.OleDbParameter = New OleDb.OleDbParameter("srcLocation", OleDb.OleDbType.Variant)
srcLocation.Value = "C:\Bilder"
srcLocation.Direction = ParameterDirection.Input
.Parameters.Add(srcLocation)
Dim srcName As OleDb.OleDbParameter = New OleDb.OleDbParameter("srcName", OleDb.OleDbType.Variant)
srcName.Value = "DateiName.jpg"
srcName.Direction = ParameterDirection.Input
.Parameters.Add(srcName)
Dim updateTime As OleDb.OleDbParameter = New OleDb.OleDbParameter("updateTime", OleDb.OleDbType.Date)
updateTime.Value = System.DateTime.Today
updateTime.Direction = ParameterDirection.Input
.Parameters.Add(updateTime)
Dim local As OleDb.OleDbParameter = New OleDb.OleDbParameter("local", OleDb.OleDbType.Decimal)
local.Value = 1
local.Direction = ParameterDirection.Input
.Parameters.Add(local)
Dim height As OleDb.OleDbParameter = New OleDb.OleDbParameter("height", OleDb.OleDbType.Decimal)
height.Value = 480
height.Direction = ParameterDirection.Input
.Parameters.Add(height)
Dim width As OleDb.OleDbParameter = New OleDb.OleDbParameter("width", OleDb.OleDbType.Decimal)
width.Value = 640
width.Direction = ParameterDirection.Input
.Parameters.Add(width)
Dim contentLength As OleDb.OleDbParameter = New OleDb.OleDbParameter("contentLength", OleDb.OleDbType.Decimal)
contentLength.Value = abPicture.Length
contentLength.Direction = ParameterDirection.Input
.Parameters.Add(contentLength)
Dim fileFormat As OleDb.OleDbParameter = New OleDb.OleDbParameter("fileFormat", OleDb.OleDbType.Variant)
fileFormat.Value = ".jpg"
fileFormat.Direction = ParameterDirection.Input
.Parameters.Add(fileFormat)
Dim contentFormat As OleDb.OleDbParameter = New OleDb.OleDbParameter("contentFormat", OleDb.OleDbType.Variant)
contentFormat.Value = "byteArray"
contentFormat.Direction = ParameterDirection.Input
.Parameters.Add(contentFormat)
Dim compressionFormat As OleDb.OleDbParameter = New OleDb.OleDbParameter("compressionFormat", OleDb.OleDbType.Variant)
compressionFormat.Value = "jpg"
compressionFormat.Direction = ParameterDirection.Input
.Parameters.Add(compressionFormat)
Dim mimeType As OleDb.OleDbParameter = New OleDb.OleDbParameter("mimeType", OleDb.OleDbType.Variant)
mimeType.Value = "image/jpeg"
mimeType.Direction = ParameterDirection.Input
.Parameters.Add(mimeType)
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.ToString(),"FAIL",......)
End Try[/highlight]
Wenn ich den Code ausführe, bekomme ich zwar keine Fehlermeldung aber in der Datenbank steht immer noch nichts.
Ich habe eine Web Applikation, mit der ich kontrollieren kann ob ich ein Bild speichern konnte oder nicht.
Weiterhin kann ich über die Web App die Bilder aus der Datenbank Downloaden. Das habe ich für meinen Datensatz gemacht, jedoch kann ich das Bild weder öffnen, da es von einem Unbekannten Typ ist, noch hat die Datei eine anzahl von Bytes > 0
Meine Frage ist nun: Wie kann ich über VB.NET ein ORDImage Objekt so ansprechen, dass ich die verschiedenen Felder für dieses Objekt richtig setzten kann.
Ich habe in verschiedenen Foren gelesen das man über Java sich direkt ein Objekt im Programm anlegen kann. Gibt es so etwas vielleicht in VB auch? Das würde die ganze sache erheblich erleichtern, wenn man sich ein Objekt im Programm vom Typ ORDImage erstellt und das fertige Objekt dann nur noch hoch schicken brauch.
Außerdem weiß ich das es eine Methode von ORDImage gibt, die die Parameter automatisch setzt
[highlight=vbnet]setProperties()[/highlight]
Ich weiß nur nicht wie ich diese Methode auf das Feld richtig ausführen soll.
Danke für eure Hilfe schon im Vorraus!
Ich hoffe dieser Beitrag ist besser geworden als der erste^^ Tut mir leid. Das ist mein erster Forum Beitrag.
lg max
Ich versuche schon seit einer Woche über VB ein Bild in eine ORACLE datenbank 11g zu speichern. Das Feld, in welches ich das Bild abspeichern möchte ist vom Objekt ORDSYS.ORDImage. Was ich bisher geschafft hab ist ein ORDImage-Objekt mit ORDImage.init() auf das Feld zu Instanziieren
Ich greife mit einem OleDb Treiber auf die Datenbank zu. Mein code dazu sieht auszugsweise so aus:
[highlight=vbnet]Dim oCommand As OleDb.OleDbCommand
Dim sSQL As String = "INSERT INTO tblPicture (Name, Picture, Description) VALUES (?, ORDSYS.ORDImage.init(), ?)"
oCommand = New OleDb.OleDbCommand(sSQL, Connection)
Try
With oCommand
CommandType = CommandType.Text
Dim name As OleDb.OleDbParameter = New OleDb.OleDbParameter("name", OleDb.OleDbType.Variant)
name.Value = "someName"
.Parameter.Add(name)
Dim descr As OleDb.OleDbParameter = New OleDb.OleDbParameter("descr", OleDb.OleDbType.Variant)
descr .Value = "Description"
.Parameter.Add(descr )
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.ToString, "FAIL",......)
End Try[/highlight]
So bekomme ich schon mal einen Datensatz in die Tabelle.
Jetzt möchte ich gerne das Bild in das ORDImage-Objet schreiben.
Das mache ich indem ich ein UPDATE Statement mit Parametern ausführe:
[highlight=vbnet]sSQLUpdate As String = "UPDATE tblPicture SET Picture=" & _
"ORDSYS.ORDImage(ORDSYS.ORDSource(?,?,?,?,?,?),?,? ,?,?,?,?,?)"[/highlight]
Diesen SQL String übergebe ich, wie zuvor, dem OleDbCommand und lege für die "?" folgende Parameter fest
[highlight=vbnet]
ORSYS.ORDImage(ORDSYS.ORDSource(conetent As BLOB,
srcType as varchar2,
srcLocation as varchar2,
srcName as varchar2,
updateTime as Date,
local as Number),
height as Number,
Width as Number,
ContentLength as Number,
FileFormat as Number,
ContentFormat as Number,
CompresstionFormat as Number,
MimeType as Number)[/highlight]
Der content Parameter ist ein Byte Array den ich vom Bild erstellt habe:
[highlight=vbnet]
Dim asPicture as Byte() {}
fs = New FileStream("DateiName", FileMode.Open)
fi = New FileInfo("DateiName")
Try
Dim lTemp As Long = fi.Length
Dim iLength As Integer = Convert.ToInt32(lTemp)
ReDim abPicture(iLength - 1)
fs.Read(abPicture, 0, iLength)
fs.Close()
Catch ex As Exception
m_oMessages.ShowException(ex.ToString)
End Try[/highlight]
Die Parameterübergabe für das UPDATE Statement sieht so aus:
[highlight=vbnet]
Try
sSQL = "UPDATE " & sTable & " SET PICTURE=ORDSYS.ORDImage(ORDSYS.ORDSource(?,?,?,?,? ,?),?,?,?,?,?,?,?) " & _
"WHERE ID=323"
oCommand = New OleDb.OleDbCommand(sSQL, m_oConnection)
With oCommand
.CommandType = CommandType.Text
Dim blob As OleDb.OleDbParameter = New OleDb.OleDbParameter("blob", OleDb.OleDbType.LongVarBinary)
blob.Value = abPicture
blob.Direction = ParameterDirection.Input
.Parameters.Add(blob)
Dim srcType As OleDb.OleDbParameter = New OleDb.OleDbParameter("srcType", OleDb.OleDbType.Variant)
srcType.Value = "FILE"
srcType.Direction = ParameterDirection.Input
.Parameters.Add(srcType)
Dim srcLocation As OleDb.OleDbParameter = New OleDb.OleDbParameter("srcLocation", OleDb.OleDbType.Variant)
srcLocation.Value = "C:\Bilder"
srcLocation.Direction = ParameterDirection.Input
.Parameters.Add(srcLocation)
Dim srcName As OleDb.OleDbParameter = New OleDb.OleDbParameter("srcName", OleDb.OleDbType.Variant)
srcName.Value = "DateiName.jpg"
srcName.Direction = ParameterDirection.Input
.Parameters.Add(srcName)
Dim updateTime As OleDb.OleDbParameter = New OleDb.OleDbParameter("updateTime", OleDb.OleDbType.Date)
updateTime.Value = System.DateTime.Today
updateTime.Direction = ParameterDirection.Input
.Parameters.Add(updateTime)
Dim local As OleDb.OleDbParameter = New OleDb.OleDbParameter("local", OleDb.OleDbType.Decimal)
local.Value = 1
local.Direction = ParameterDirection.Input
.Parameters.Add(local)
Dim height As OleDb.OleDbParameter = New OleDb.OleDbParameter("height", OleDb.OleDbType.Decimal)
height.Value = 480
height.Direction = ParameterDirection.Input
.Parameters.Add(height)
Dim width As OleDb.OleDbParameter = New OleDb.OleDbParameter("width", OleDb.OleDbType.Decimal)
width.Value = 640
width.Direction = ParameterDirection.Input
.Parameters.Add(width)
Dim contentLength As OleDb.OleDbParameter = New OleDb.OleDbParameter("contentLength", OleDb.OleDbType.Decimal)
contentLength.Value = abPicture.Length
contentLength.Direction = ParameterDirection.Input
.Parameters.Add(contentLength)
Dim fileFormat As OleDb.OleDbParameter = New OleDb.OleDbParameter("fileFormat", OleDb.OleDbType.Variant)
fileFormat.Value = ".jpg"
fileFormat.Direction = ParameterDirection.Input
.Parameters.Add(fileFormat)
Dim contentFormat As OleDb.OleDbParameter = New OleDb.OleDbParameter("contentFormat", OleDb.OleDbType.Variant)
contentFormat.Value = "byteArray"
contentFormat.Direction = ParameterDirection.Input
.Parameters.Add(contentFormat)
Dim compressionFormat As OleDb.OleDbParameter = New OleDb.OleDbParameter("compressionFormat", OleDb.OleDbType.Variant)
compressionFormat.Value = "jpg"
compressionFormat.Direction = ParameterDirection.Input
.Parameters.Add(compressionFormat)
Dim mimeType As OleDb.OleDbParameter = New OleDb.OleDbParameter("mimeType", OleDb.OleDbType.Variant)
mimeType.Value = "image/jpeg"
mimeType.Direction = ParameterDirection.Input
.Parameters.Add(mimeType)
.ExecuteNonQuery()
End With
Catch ex As Exception
MessageBox.Show(ex.ToString(),"FAIL",......)
End Try[/highlight]
Wenn ich den Code ausführe, bekomme ich zwar keine Fehlermeldung aber in der Datenbank steht immer noch nichts.
Ich habe eine Web Applikation, mit der ich kontrollieren kann ob ich ein Bild speichern konnte oder nicht.
Weiterhin kann ich über die Web App die Bilder aus der Datenbank Downloaden. Das habe ich für meinen Datensatz gemacht, jedoch kann ich das Bild weder öffnen, da es von einem Unbekannten Typ ist, noch hat die Datei eine anzahl von Bytes > 0
Meine Frage ist nun: Wie kann ich über VB.NET ein ORDImage Objekt so ansprechen, dass ich die verschiedenen Felder für dieses Objekt richtig setzten kann.
Ich habe in verschiedenen Foren gelesen das man über Java sich direkt ein Objekt im Programm anlegen kann. Gibt es so etwas vielleicht in VB auch? Das würde die ganze sache erheblich erleichtern, wenn man sich ein Objekt im Programm vom Typ ORDImage erstellt und das fertige Objekt dann nur noch hoch schicken brauch.
Außerdem weiß ich das es eine Methode von ORDImage gibt, die die Parameter automatisch setzt
[highlight=vbnet]setProperties()[/highlight]
Ich weiß nur nicht wie ich diese Methode auf das Feld richtig ausführen soll.
Danke für eure Hilfe schon im Vorraus!
Ich hoffe dieser Beitrag ist besser geworden als der erste^^ Tut mir leid. Das ist mein erster Forum Beitrag.
lg max
Comment