C# kép mentése, másolása könyvtárba és adatbázisba.

Fórumok

Sziasztok ismét!:)
naszóval a problémám a következő: Van egy openfiledialog, amivel megnyitok egy képet, ezt a képet rögtön meg is jelenítem egy pictureBox-ban, de a megjelenítéssel egy időben szeretném másolni a képet a debug/images-be, és van egy adatok.mdb ahova a másolt kép elérési útját, szeretném beírni, hogy a későbbiekben is meg tudjam nyitni onnan.
odáig már okés hogy megnyitja és elmenti a képet a debug/images-be... de az adatok.mdb-be semmi sem kerül.

és van egy hibaüzim is: már létező... a következő fájl nem található F:\adatok.mdb

itt másolom és mentem a képet.

string imagesDir = Application.StartupPath + @"\images";
string picture = null;
openFileDialog1.Filter = "Pictures|*.jpg;*.jpeg;*.bmp;*.png;*.gif";
DialogResult result = openFileDialog1.ShowDialog();

if (result == DialogResult.OK)
{
picture = openFileDialog1.FileName;
}
if (!Directory.Exists(imagesDir))
Directory.CreateDirectory(imagesDir);

string dest = imagesDir + "\\" + picture.Substring(picture.LastIndexOf(@"\") + 1);
if (picture != null)
{
File.Copy(picture, dest, true);
Image image = new Bitmap(picture);
pictureBox1.Image = image;
}
Ezután az adatbázisba megpróbálom elmenti
myCommand2.Parameters.Add("@kep", OleDbType.VarChar).Value = dest;

és máris van egy hibaüzim is: már létező... a következő fájl nem található F:\adatok.mdb

És akkor elkadtam.. segítsetek! Köszi!

Hozzászólások

Bocsi, de a "myCommand2" pontosan mit is takar?

string mySelectQuery2 = "INSERT INTO Fejezet ([fejezet_id], [tema_id], [kep], [szoveg]) VALUES (@fejezet_id, @tema_id, @kep, @szoveg)";
OleDbCommand myCommand2 = new OleDbCommand(mySelectQuery2, myConnection);
myCommand2.Parameters.Add("@kep", OleDbType.VarChar).Value = dest;

itt kéne hozzáadni az adatbázishoz a kép elérési útját... asszem:)

Szia,

A Parameters.Add-dal csak beállítod a paramétered értékét, de nem írod bele az adatbázisba. Valahogy így írhatod be:

"OleDbConnection példány".Open();
"OleDbDataAdapter példány".Fill("DataSet példány");

Bár a hibaüzenet nem erre utal... beírnád a teljes szöveget?
Az adatbázisod dataset/connection/adapter cuccai be vannak állítva?

Itt találsz példát az oledb írásra:
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparamete…

private void kepOk_Click(object sender, EventArgs e)
{

string imagesDir = Application.StartupPath + @"\images";
string picture = null;
openFileDialog1.Filter = "Pictures|*.jpg;*.jpeg;*.bmp;*.png;*.gif";
DialogResult result = openFileDialog1.ShowDialog();

if (result == DialogResult.OK)
{
picture = openFileDialog1.FileName;
}
if (!Directory.Exists(imagesDir))
Directory.CreateDirectory(imagesDir);

string dest = imagesDir + "\\" + picture.Substring(picture.LastIndexOf(@"\") + 1);
if (picture != null)
{
File.Copy(picture, dest, true);
Image image = new Bitmap(dest);
pictureBox1.Image = image;
}

}
private void buttonTemaMent_Click(object sender, EventArgs e)
{
GroupboxSzoveg.Visible = false;
groupBoxKép.Visible = false;
kepOk.Visible = false;

string myConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=adatok.mdb";
string mySelectQuery1 = "DELETE FROM Fejezet WHERE (tema_id = " + temaSorszamok[temavalaszt.Text] + ") AND (fejezet_id= " + fejezet_sorszam + ")";
string mySelectQuery2 = "INSERT INTO Fejezet ([fejezet_id], [tema_id], [kep], [szoveg]) VALUES (@fejezet_id, @tema_id, @kep, @szoveg)";

OleDbConnection myConnection = new OleDbConnection(myConnectionString);
OleDbCommand myCommand1 = new OleDbCommand(mySelectQuery1, myConnection);
OleDbCommand myCommand2 = new OleDbCommand(mySelectQuery2, myConnection);

myCommand2.Parameters.Add("@fejezet_id", OleDbType.VarChar).Value = fejezet_sorszam;
myCommand2.Parameters.Add("@tema_id", OleDbType.VarChar).Value = temaSorszamok[temavalaszt.Text];
myCommand2.Parameters.Add("@kep", OleDbType.VarChar).Value = dest;
myCommand2.Parameters.Add("@szoveg", OleDbType.VarChar).Value = textBoxSzoveg.Text;

try
{
myConnection.Open();
myCommand1.ExecuteReader();
myCommand2.ExecuteReader();
}

catch (OleDbException ex)
{
MessageBox.Show("Már létező...\n"+ex.Message);
}

myConnection.Close();

}

a fejezet_id-t meg az összes többit hozzáadja...csak a képet nem akarja... és ott ír hibát.

Hi,
csak hozzafuznivalo!
miert executereader() ? miert nem executenonquery() ?
ez igy is jo, de ugy meg szebb, es persze nem koltseges annyira. A reader var egy soronkent olvashato adathalmazt vissza es minden elokeszuletet megtesz erte, amire neked nincs szukseged.

szép napokat
zsömi