2016-01-19 1 views
0

Я хочу вставить изображение в мою базу данных SQL. У меня есть этот код в настоящее время, и он вводит нуль, где должно быть изображение. Почему это происходит?Попытка вставить изображение в базу данных sql

Я использую здесь простой класс комплексирования.

Вы можете найти код, я использовал ниже:

Imports System.IO 
Imports System.Data.SqlClient 

Public Class addquestion 
    Dim con As New System.Data.Odbc.OdbcConnection("DRIVER={MySQL ODBC 5.2 ANSI Driver};SERVER=localhost;PORT=3306;DATABASE=physicsapp;USER=root;PASSWORD=root;OPTION=3;") 
    Dim rs As Odbc.OdbcDataReader 

Private Sub addquestion_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

End Sub 

Private Sub QuestionButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles QuestionButton.Click 
    Dim myFileDlog As New OpenFileDialog 


    myFileDlog.InitialDirectory = "c:/" 


    myFileDlog.Filter = "All Files (*.*)|*.*" & _"|Picture Files (*.png)|*.png" 


    myFileDlog.FilterIndex = 1 


    myFileDlog.RestoreDirectory = True 


    If myFileDlog.ShowDialog() = _ 
     DialogResult.OK Then 
     If Dir(myFileDlog.FileName) <> "" Then 
      MsgBox("File Exists: " & _ 
        myFileDlog.FileName, _ 
        MsgBoxStyle.Information) 
     Else 
      MsgBox("File Not Found", _ 
        MsgBoxStyle.Critical) 
     End If 
    End If 


    qnametextbox.Text = myFileDlog.FileName 
End Sub 

    Dim ans as Char = "B" 
    Dim file As String = qnametextbox.Text 
    Dim question As Image 
    question = Image.FromFile(file) 

    Dim ms As New MemoryStream() 
    question.Save(ms, System.Drawing.Imaging.ImageFormat.Png) 
    Dim data As Byte() = ms.GetBuffer() 

    Dim s As String = "INSERT INTO tests VALUES (@Question ,'" & ans & "', 200)" 

    Dim sql As New Odbc.OdbcCommand(s, con) 
    sql.Parameters.Add("@Question", Odbc.OdbcType.VarBinary).Value = data 
    con.Open() 
    sql.ExecuteNonQuery() 
    con.Close() 

это определение таблицы

CREATE TABLE `tests` (
    `Question` blob NOT NULL, 
    `CorrectAnswer` varchar(8) DEFAULT NULL, 
    `QuestionNumber` int(8) NOT NULL AUTO_INCREMENT, 
    KEY `QuestionNumber` (`QuestionNumber`) 
) ENGINE=MyISAM AUTO_INCREMENT=201 DEFAULT CHARSET=utf8 

Любое предложение может помочь.

Спасибо.

+0

1-Какие СУБД вы работаете? Из вашего подключения это похоже на MYSQL. Удалите тег sql-server из вопроса. –

+0

2-пост SQL-определение таблицы, в которую вы вставляете. –

+0

где вы определяете 'ans' – Nomeaning25

ответ

0

Независимо от того, какую технологию доступа к данным или базу данных вы используете, сначала необходимо преобразовать am Image в Byte, а затем сохранить это. При извлечении вы преобразовываете массив Byte обратно в Image.

Чтобы сохранить:

Dim connection As New SqlConnection("connection string here") 
Dim command As New SqlCommand("UPDATE MyTable SET Picture = @Picture WHERE ID = 1", connection) 

'Create an Image object.' 
Using picture As Image = Image.FromFile("file path here") 
    'Create an empty stream in memory.' 
    Using stream As New IO.MemoryStream 
     'Fill the stream with the binary data from the Image.' 
     picture.Save(stream, Imaging.ImageFormat.Jpeg) 

     'Get an array of Bytes from the stream and assign to the parameter.' 
     command.Parameters.Add("@Picture", SqlDbType.VarBinary).Value = stream.GetBuffer() 
    End Using 
End Using 

connection.Open() 
command.ExecuteNonQuery() 
connection.Close() 
+0

. Я не вижу разницы между этим кодом и моим исходным кодом, но я обновил свой код, чтобы он соответствовал и вы получите ту же ошибку в командной строке .ExecuteNonQuery: «ERROR [HY000] [MySQL] [ODBC 5.2 (a) Драйвер] [mysqld-5.5.33] Столбец« Вопрос »не может быть пустым» –

+0

myabe вы должны, если возможно попробовать изменить тип данных на longblob – Dandy

+0

Изображение im пытается добавить только 8kb, но не работает, когда я меняю его на Longblob anyway –