Forum: bilder i databas

Forum huvudsida -> Programmering -> bilder i databas

Sidor: 1

Till botten

Cirela 19:54 - 24:e Mars 2007 | Post #1
Medlem
Inlägg: 18


Skicka PM
Jag har en mängd txt filer och många kort som jag vill infoga i databasen. Jag har börjat
med det enklaste, att spara bilder på databasen.
Jag har skrivit följande, som det går att spara men inte läsa från databasen:

private void button1_Click(object sender, System.EventArgs e)
{
/// spara som fil typ boxDialog
ofdDataBase.Filter = "db1|*.jpg;*.gif;*.bmp";

/// -ppnas fönstret där man ska välja kort eller fil
if (ofdDataBase.ShowDialog(this)==DialogResult.OK)
{
System.IO.FileStream fs = new FileStream(ofdDataBase.FileName,FileMode.Open,FileAccess.Read);
System.IO.BinaryReader br = new System.IO.BinaryReader(fs);
byte [] abImagen=new byte[fs.Length];
br.Read(abImagen,0,(int)fs.Length);
br.Close();
fs.Close();
try
{
this.oleDbConnection1.Open();
this.oleDbDataAdapter1.InsertCommand.CommandText =
"INSERT INTO table1 ("+
"kort"+
")VALUES ('"+
abImagen+"')";

this.oleDbDataAdapter1.InsertCommand.ExecuteNonQuery();
}
catch(System.Data.OleDb.OleDbException o)
{
MessageBox.Show(o.Message);
}
}
else
MessageBox.Show("Error");


}
private void button1_Click_1(object sender, System.EventArgs e)
{
try
{

int n=1;
this.oleDbConnection1.Open();
this.oleDbDataAdapter1.SelectCommand.CommandText = "SELECT
  • FROM table1 WHERE id = "+n;
this.oleDbDataAdapter1.Fill(dataSet1);
this.oleDbDataAdapter1.SelectCommand.ExecuteNonQuery();
this.oleDbConnection1.Close();

MemoryStream ms = new MemoryStream();
ms.Write((byte[])dataSet1.Tables[0].Rows[0][1], 0 ,0);
this.pictureBox1.Image = Image.FromStream(ms);

}
catch(System.Data.OleDb.OleDbException o)
{
MessageBox.Show(o.Source+" "+o.Message);
}

}
Detta fungerar inte.
Har ni några tips? vad jag har förstått ska jag spara mina bilder som ole object(omvandla
till det först) men vet inte riktigt hur.
Sen vill jag spara stora document .txt, ska dett onvandlas till ole object också? går det
att göra på samma sätt som mina bilder?

MVH Lisa

-------------------------
Ingen signatur!



Independence 22:40 - 24:e Mars 2007 | Post #2
Administratör
Inlägg: 1800


Skicka PM
1. Vad är det för språk du skriver i?

2. Vad är det för databasmotor du använder?

3. "Detta fungerar inte." Vad är det som inte fungerar? Vad får du för felmeddelanden?

4. Kan du inte ladda upp bilden separat och bara lagra en sökväg i databasen? Det brukar anses som ganska klumpigt att ha binärdata såsom bilder direkt i databasen.

Bara lite frågor som gör det enklare för oss, eller överhuvud taget möjligt för oss, att hjälpa digSmiley

-------------------------

Vi är riddarna som säger fiskbulle!





Cirela 23:53 - 24:e Mars 2007 | Post #3
Medlem
Inlägg: 18


Skicka PM
Jag använder C#, och jag vill ladda mina filer på accessdatabas och när jag kör programmet får jag felmeddelande: invalid parameter used.
Jo du har rätt att det är en bra idé att ha en sökväg i databasen, men kan du ge mig ett tips om hur jag kan fixa det?
Tack för hjälpen.


-------------------------
Ingen signatur!



Independence 12:06 - 25:e Mars 2007 | Post #4
Administratör
Inlägg: 1800


Skicka PM
Ligger databasen på samma maskin som kör programmet? I så fall bör det räcka med att kopiera filen via något lämpligt OS anrop eller så.

Vilken rad/vilket kommando är det du får "Invalid parameter used" på?

-------------------------

Vi är riddarna som säger fiskbulle!





Cirela 16:35 - 25:e Mars 2007 | Post #5
Medlem
Inlägg: 18


Skicka PM
databasen ligger på samma dator och på samma katalog. Felet ligger på raden: this.pictureBox1.Image = Image.FromStream(ms);
Vad menar du med OS?
tack för hjälpen

-------------------------
Ingen signatur!



Independence 19:15 - 25:e Mars 2007 | Post #6
Administratör
Inlägg: 1800


Skicka PM
Med OS-anrop menar jag lämpligt anrop till operativsystemet. Jag vet inte hur det ser ut i C#, men det finns helt säkert något för att kopiera filer. Lite beroende på vad det är för något du ska göra behöver du ju inte ens kopiera filen, utan bara spara sökvägen direkt och sedan använda den när du ska visa bilden.

-------------------------

Vi är riddarna som säger fiskbulle!





tobbez 20:04 - 25:e Mars 2007 | Post #7
Medlem
Inlägg: 364


Skicka PM
Om jag inte tror helt fel så är Independence ute och cyklarSmiley
[eller kanske inte, men delen med ladda upp var det iaf]

Jag skulle dock gissa på att felet ligger i antingen att Image.FromStream() inte tycker att 'ms' är en giltig stream, eller att datat i strömen inte är "korrekt" bilddata.
För att kontrollera om det är det senare skulle man tex kunna skriva till en extern fil istället för en minnes-ström och sedan försöka visa den resulterande filen med något externt program.

Men ska du bara ha sökväg till filen i databasen, kan det beroende på hur du ska använda filen vara så att du inte behöver använda databasen för bilderna alls. Det är dock lite svårt att avgöra om man inte vet vad det ska användas tillSmiley




Independence 20:42 - 25:e Mars 2007 | Post #8
Administratör
Inlägg: 1800


Skicka PM
    Citat av tobbez:
Om jag inte tror helt fel så är Independence ute och cyklarSmiley
[eller kanske inte, men delen med ladda upp var det iaf]

...


Hm, vad av det jag har sagt är det du syftar på? Att man inte bör lagra binärdata direkt i databasen utan lägga det utanför? Vad är fel med det?

-------------------------

Vi är riddarna som säger fiskbulle!





Cirela 22:40 - 25:e Mars 2007 | Post #9
Medlem
Inlägg: 18


Skicka PM
i kolumnen i min databas där bilderna ska lagas står: ong binary data. Det jag vill göra nu är att läsa/titta på den på en vanligt pictureBox

-------------------------
Ingen signatur!



Independence 22:52 - 25:e Mars 2007 | Post #10
Administratör
Inlägg: 1800


Skicka PM
    Citat av Cirela:
i kolumnen i min databas där bilderna ska lagas står: ong binary data. Det jag vill göra nu är att läsa/titta på den på en vanligt pictureBox


Du får väl göra om kolumnen till en för text antar jag, och sedan spara sökvägen där.
När du sedan ska ladda in bilden så anger du bara sökvägen som du sparat i databasen.

-------------------------

Vi är riddarna som säger fiskbulle!





sdac 23:32 - 25:e Mars 2007 | Post #11
Medlem
Inlägg: 235


Skicka PM
    Citat av Cirela:

i kolumnen i min databas där bilderna ska lagas står: ong binary data.

ong? wrong?

"INSERT INTO table1 ("+
"kort"+
")VALUES ('"+
abImagen+"')";


Nu kodar jag varken C# eller håller på med OLE-databaser, men det är väl ganska uppenbart att du inte kan slänga in binärdata mellan två enkelcitationstecken hur som helst? Mycket sannolikt att SQL-interpreteraren blir förvirrad och ger ifrån sig fel som "wrong binary data" och "invalid parameter used" som du fått. Inget motsäger väl att en bildfil innehåller en byte med värdet 39..? Det är en säkerhetskonsideration också, vem som helst kan namnge sin fil "*.jpg", och ge den innehålet "');" följt av explicita SQL-kommandon för att ändra helt andra saker i databasen...




Cirela 00:39 - 26:e Mars 2007 | Post #12
Medlem
Inlägg: 18


Skicka PM
tack så mycket för tipsen

-------------------------
Ingen signatur!



Cirela 00:55 - 26:e Mars 2007 | Post #13
Medlem
Inlägg: 18


Skicka PM
På databasen står inte: "wrong binary data" utan det står: "Long binary data", betyder detta att inserta bin filen lyckades?

-------------------------
Ingen signatur!



sdac 01:36 - 26:e Mars 2007 | Post #14
Medlem
Inlägg: 235


Skicka PM
    Citat av Cirela:
På databasen står inte: "wrong binary data" utan det står: "Long binary data", betyder detta att inserta bin filen lyckades?


Ja, det låter som om det funkar men att du måste använda någon annan slags lagringsenhet i tabellen du lägger in binärdatan i innan det funkar på det sättet att det faktiskt sparas.

... Hur är det möjligt att det funkar med binärdata när det är så sannolikt att filen skulle innehålla en byte med värdet 39? Trollar C#-kompileraren och ser "Jaså, nu ska strängen läggas in i en SQL-query, ja men då måste vi ju escapea med backslash på alla citationstecken! Annars blir ju SQL-interpreteraren förvirrad!"? Och när man lägger ihop strängar vanligt, som inte ska användas som SQL-querys, då gör den inte det? Isåfall är C# värre än jag trodde. Finner dock inte detta så sannolikt, du hade väl turen att ladda in en fil som var fri från ASCII 39... Den här gången...


Senast redigerad 01:38 - 26:e Mars 2007


ozamosi 01:53 - 26:e Mars 2007 | Post #15
Administratör
Inlägg: 1129


Skicka PM
Nej... "Long binary data" är väl ändå typen på fältet i databasen? Som inte har ett dugg med huruvida något lyckades eller inte att göra.

-------------------------
Ljusblå



sdac 02:18 - 26:e Mars 2007 | Post #16
Medlem
Inlägg: 235


Skicka PM
    Citat av ozamosi:
Nej... "Long binary data" är väl ändå typen på fältet i databasen? Som inte har ett dugg med huruvida något lyckades eller inte att göra.


,,r "Long binary data" kolumntypen? Jag trodde det var ett slags felmeddelande, "Too long binary data" eller nåt? Antog inte att trådskaparen skulle vara så mindre vetande att han/hon trodde att man kunde avgöra om en överföring lyckats genom att titta på den korresponderande kolumnens definitionstyp..? Det är ju två helt irrelevanta saker, som att kolla i kylskåpet för att se hur mycket klockan är...

Hursomhelst är något fel med en av kolumnerna. Varför spara en bildfil i en databas egentligen? Spara filnamnet och metainfo i databasen, men filen som en vanlig fil, skulle jag och säkert många andra gjort.


Senast redigerad 02:19 - 26:e Mars 2007


ozamosi 02:30 - 26:e Mars 2007 | Post #17
Administratör
Inlägg: 1129


Skicka PM
    Citat av sdac:
    Citat av ozamosi:Det är ju två helt irrelevanta saker, som att kolla i kylskåpet för att se hur mycket klockan är...

Absolut inte! Försök spara en jpeg i en BIGINT så får du seSmiley

-------------------------
Ljusblå



sdac 12:49 - 26:e Mars 2007 | Post #18
Medlem
Inlägg: 235


Skicka PM
    Citat av ozamosi:
    Citat av sdac:
    Citat av ozamosi:Det är ju två helt irrelevanta saker, som att kolla i kylskåpet för att se hur mycket klockan är...

Absolut inte! Försök spara en jpeg i en BIGINT så får du seSmiley


Hahahahhahah ja, påminner mig om något jag läste för länge sedan om en person som hade komprimerat sin MP3-samling i MD5, formaterat om hårddisken och sedan undrat hur man packat upp det igen.




tobbez 02:32 - 27:e Mars 2007 | Post #19
Medlem
Inlägg: 364


Skicka PM
Independence: just "ladda upp" hade inte med något att göra, men det var iofs bara dåligt ordval. Jag får väl skylla på att jag var trött eller någotSmiley




Sidor: 1

Forum huvudsida -> Programmering -> bilder i databas
Atom feed

Du får inte posta i den här tråden | Till toppen