2015-05-30 8 views
2

Я хочу сохранить изображения в базе данных SQL при выборе пользователями. Пока я набрал этот код. Это не дает мне никакой ошибки, но не добавляет в базу данных. Я думаю, что что-то не так с SQL Statement.Сохранение изображения в базе данных sql C#

Может мне кто-то помочь?

Это мой код:

public void addImages(string tag1,string tag2,string tag3,string status,string fileName) 
{ 
    try 
    { 
     byte[] image = null; 
     FileStream fsstream = new FileStream(fileName,FileMode.Open,FileAccess.Read); 
     BinaryReader br = new BinaryReader(fsstream); 
     image = br.ReadBytes((int)fsstream.Length); 

     SqlCommand command = new SqlCommand("INSERT INTO [ImagesAndTags] (Images,Tags,Tag2,Tag3,Status) values (@IMG,'" + tag1 + "','" + tag2 + "','" + tag3 + "','" + status + "')", con); 
     con.Open(); 
     command.Parameters.Add(new SqlParameter("@IMG",image)); 
     SqlDataReader reader = command.ExecuteReader(); 
     MessageBox.Show("Added Successfully!!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     while (reader.Read()) { } 
    } 
    catch(Exception ex) { } 
} 

ответ

3

ExecuteReader возвращает данные. В вашем случае это не так. Просто попробуйте вставить строку в свою базу данных. Вот почему вам нужно использовать ExecuteNonQuery.

И параметризуйте ваши другие значения вставки, как и для переменной image. Также используйте using statement для управления соединениями и командами базы данных.

int insertedRowCount = command.ExecuteNonQuery(); 

if(insertedRowCount > 0) 
    MessageBox.Show("Added Successfully!!!", "", MessageBoxButtons.OK, MessageBoxIcon.Information); 
0

Удалить все обратный слэш, одиночные перевернутой запятые и двойные кавычки из данных, которые вы сохраняете в базе данных.

Замените его на некоторую постоянную строку и, возвращая его обратно, преобразуйте его в оригинал.

+0

Ум, что? Если вы думаете, что он должен кодировать экранированные данные, вы ошибаетесь. Во-первых, использование параметризованного запроса будет иметь для него дело. Для другого он передаёт массив байтов (а не строку) и, следовательно, не имеет дело с символами в этой точке (что тип на db, мы не знаем). –