2013-10-07 2 views
-1

Я пытаюсь сделать следующие вещи:Невозможно добавить изображение в базу данных

  1. Добавить новую фотографию в базу данных (в колонке под названием «PicProfile»).
  2. Скопируйте путь/местоположение в текстовое поле (с именем image_path_txt). В добавлении я могу добавить запись с другими полями, кроме изображения.

Может кто-нибудь сказать мне, что я делаю неправильно?

private void button1_Click(object sender, EventArgs e) 
{  
    byte[] imageBT = null; 

    FileStream fstream = new FileStream(this.image_path_txt.Text, FileMode.Open, FileAccess.Read); 

    BinaryReader br = new BinaryReader(fstream); 
    imageBT = br.ReadBytes((int)fstream.Length); 
    string constring = "datasource=localhost;port=3306;username=root;password=amg135468lns"; 
    string Query = "insert into db.newuser (FName,LName,Age,Gender,Phone_No, Mobile_No,City, Street, Street_No,Email,idNewUser,PicProfile)"+ "values('" + this.Fname_txt.Text + "','" + this.Lname_txt.Text + "','"+this.Age_txt.Text+"','"+this.Gender+"','" + this.Phone_txt.Text + "','" + this.Mobile_txt.Text + "','" + this.City_txt.Text + "','" + this.Street_txt.Text + "','" + this.StreetNo_txt.Text + "','" + this.Email_txt + "','"+this.user_no_txt.Text+"',@PicP);"; 

    MySqlConnection conDataBase = new MySqlConnection(constring); 
    MySqlCommand cmdDataBase = new MySqlCommand(Query,conDataBase); 
    MySqlDataReader myReader; 

    try 
    { 
     conDataBase.Open(); 
     cmdDataBase.Parameters.Add(new MySqlParameter("@PicP", imageBT)); 

     myReader = cmdDataBase.ExecuteReader(); 
     MessageBox.Show("Saved"); 
     while (myReader.Read()) 
     { 

     } 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 

} 
+0

какие ошибки вы получаете? также вам не нужен считыватель для вставки. Попробуйте 'ExecuteScalar'. –

+0

Что вы делаете неправильно? С чего начать .... – musefan

+0

«Пустой путь не является законным». - Это исключение. это строка taht, связанная с исключением: FileStream fstream = новый FileStream (this.image_path_txt.Text, FileMode.Open, FileAccess.Read); – Nizan

ответ

2

Пустое имя путь не является законным.

Если это ошибка; это довольно понятно. Вы предоставляете пустой путь. Или, другими словами, Textthis.image_path_txt - пусто.


Ничего себе. Итак, давайте начнем с , почему вы не можете добавить его в базу данных. Вы не можете выдать ExecuteReader в отношении заявления INSERT. Таким образом, вместо того, чтобы:

myReader = cmdDataBase.ExecuteReader(); 
MessageBox.Show("Saved"); 
while (myReader.Read()) 
{ 

} 

просто сделать это:

cmdDataBase.ExecuteNonQuery(); 

Кроме того, вместо того, чтобы все это:

byte[] imageBT = null; 

FileStream fstream = new FileStream(
    this.image_path_txt.Text, 
    FileMode.Open, 
    FileAccess.Read); 

BinaryReader br = new BinaryReader(fstream); 
imageBT = br.ReadBytes((int)fstream.Length); 

просто сделать это:

byte[] imageBT = File.ReadAllBytes(this.image_path_txt.Text); 

Следующая , перейдем к управлению ресурсами. Вы должны использовать в using заявление здесь:

using (MySqlConnection conDataBase = new MySqlConnection(constring)) 
using (MySqlCommand cmdDataBase = new MySqlCommand(Query,conDataBase)) 
{ 
    // add parameters 

    // execute the statement 
} 

Далее, давайте перейдем к инъекциям SQL. Прямо сейчас вы создаете запрос, широко открытый для SQL Injection, потому что он не полностью параметризован. Он должен читать что-то вроде этого:

INSERT INTO tbl (field1, field2, field3) VALUES (@field1, @field2, @field3) 

, а затем, когда вы добавляете параметры, просто сделать это:

сообщения
cmdDataBase.Parameters.AddWithValue("@field1", txtField1.Text); 
cmdDataBase.Parameters.AddWithValue("@field2", txtField2.Text); 
cmdDataBase.Parameters.AddWithValue("@field3", imageBT); 
+0

+1: Очень важно. Кроме того: Избегайте строковых строк кодирования – musefan

+1

@musefan, Спасибо! И да, я думаю, я бы тоже предложил это. Но давайте оставим это как комментарий. Я не хочу вникать в это ...: D –

+0

Спасибо за ваш ответ, я сделаю, как вы предлагаете. – Nizan

Смежные вопросы