Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема cо вставкой картинки в бд / 8 сообщений из 8, страница 1 из 1
13.05.2007, 19:03
    #34521871
Julu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
Здравствуйте! Помогите мне,пожалуйста. У меня проблема с записью картинки в базу данных SQLServer2005. У меня есть форма (программирую в visual studio 2005), на которую вынесен PictureBox. Соответственно я выбираю картинку с помощью OpenFileDialog и помещаю ее сначала на форму в этот PictureBox, а потом хочу эту картинку вставить в базу данных в соответствие с выбранным id.
Выглядит этот код так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
OpenFileDialog openfiledialog1 = new OpenFileDialog();
            Image img=null;
           
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
               
                this.Filename = this.openFileDialog1.FileName;
               
                img=Image.FromFile(this.Filename);
                pictureBox1.Image = img;
               
            }
            string Connection = "Data Source=MADDY;Initial Catalog=Bookshop;Integrated Security=True";
            SqlConnection connect = new SqlConnection(Connection);
            connect.Open();
            
           SqlCommand cmd = new SqlCommand("UPDATE EmployePhoto SET EmployeePhoto = @Photo WHERE Cod = '" + id + "%'",connect );
            cmd.Parameters.Add("@Photo", SqlDbType.Image);
            cmd.Parameters["@Photo"].Value = img;
            cmd.ExecuteNonQuery();
            connect.Close();

на строчку cmd.ExecuteNonQuery() выдается ошибка {"Failed to convert parameter value from a Bitmap to a Byte[]."} Что мне делать?? При чем здесь Byte, если у меня тип Image?? И вообще как по Вашему мнению я правильно тут делаю и что можно изменить, потому что я новичок в ADO.net??
...
Рейтинг: 0 / 0
13.05.2007, 19:28
    #34521879
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
SqlDbType.Image -- это не то, что вы подумали. Так в SQL Server называется тип данных, в котором хранится BLOB-объект (Binary Large Object). Так что простым присваиванием объекта Image вы не обойдетесь. Потребуется сохранить его в поток, поток представить как массив байт и потом только присвоить параметру.
...
Рейтинг: 0 / 0
13.05.2007, 19:50
    #34521897
Julu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
ОК. Я Вас поняла. Немного изменила код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
OpenFileDialog openfiledialog1 = new OpenFileDialog();
          Byte[] Data = null;

           if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
              this.Filename = this.openFileDialog1.FileName;
                              
            }
            FileStream fs = new FileStream(Filename, FileMode.Open);
            Byte[] byteFile = new Byte[fs.Length];
            int read = (int)fs.Length;
            fs.Read(byteFile,  0 , read);


            string Connection = "Data Source=MADDY;Initial Catalog=Bookshop;Integrated Security=True";
            SqlConnection connect = new SqlConnection(Connection);
            connect.Open();
            
           SqlCommand cmd = new SqlCommand("UPDATE EmployePhoto SET EmployeePhoto = @Photo WHERE Cod = '" + id + "%'",connect );
            cmd.Parameters.Add("@Photo", SqlDbType.VarBinary);
            cmd.Parameters["@Photo"].Value = Data;
           cmd.ExecuteNonQuery();
            connect.Close();

Выдается уже другая ошибка-{"Parameterized Query '(@Photo varbinary(8000))UPDATE EmployePhoto SET EmployeePhoto = ' expects parameter @Photo, which was not supplied."} И все приложение крашится. :(
...
Рейтинг: 0 / 0
13.05.2007, 20:13
    #34521918
Julu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
И еще вопрос почему если написать вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int id = Convert.ToInt32(textBox1.Text);
.
.
.
SqlCommand cmd = new SqlCommand("UPDATE EmployePhoto SET EmployeePhoto = @Photo WHERE EmployeeID = @ID",connect );
            cmd.Parameters.Add("@Photo", SqlDbType.VarBinary);
           
            cmd.Parameters["@Photo"].Value = Data;
            cmd.Parameters["@ID"].Value = id;

тоже выдается ошибка {"An SqlParameter with ParameterName '@ID' is not contained by this SqlParameterCollection."}?
...
Рейтинг: 0 / 0
13.05.2007, 20:33
    #34521933
Julu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
Все спасибо:))я сама разобралась. Вот мой конечный код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
private void button2_Click(object sender, EventArgs e)
        { 
            int id = Convert.ToInt32(textBox1.Text);
            OpenFileDialog openfiledialog1 = new OpenFileDialog();
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                this.Filename = this.openFileDialog1.FileName;
            }
            FileStream fs = new FileStream(Filename,FileMode.Open);
            Byte[] Data  = new Byte[fs.Length];
            int read = (int)fs.Length;
            fs.Read(Data,  0 , read);
            string Connection = "Data Source=MADDY;Initial Catalog=Bookshop;Integrated Security=True";
            SqlConnection connect = new SqlConnection(Connection);
            connect.Open();
            SqlCommand cmd = new SqlCommand("UPDATE EmployeePhoto SET EmployeePhoto = @Photo WHERE EmployeeID = @ID",connect );
            cmd.Parameters.Add("@Photo", SqlDbType.VarBinary);
            cmd.Parameters["@Photo"].Value = Data;
            cmd.Parameters.Add("@ID", SqlDbType.Int);
            cmd.Parameters["@ID"].Value = id;
            cmd.ExecuteNonQuery();
            connect.Close();
            }
...
Рейтинг: 0 / 0
13.05.2007, 22:25
    #34522003
Julu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
пишу код дальше для того, чтобы вставить картинку в приложение в picturebox:
добавила еще строчки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
connect.Open();
            
            SqlCommand cmd1 = new SqlCommand("SELECT EmployeePhoto FROM EmployeePhoto WHERE EmployeeID LIKE '" + id + "%'", connect);
            
            SqlDataReader reader = cmd1.ExecuteReader();
            Data = (Byte[])reader.GetValue( 0 );
           
            System.IO.MemoryStream ms = new System.IO.MemoryStream(Data,  0 , (int)Data.Length);
            Bitmap bmp = new Bitmap(ms);
            pictureBox1.Image = bmp;

ошибка на строчку Data = (Byte[])reader.GetValue(0); {"Invalid attempt to read when no data is present."}!!!!!!!!!

Как Вы думаете в чем дело?
...
Рейтинг: 0 / 0
14.05.2007, 10:52
    #34522600
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
...
Рейтинг: 0 / 0
14.05.2007, 21:28
    #34524678
Julu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема cо вставкой картинки в бд
Спасибо Вам
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проблема cо вставкой картинки в бд / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]