Что здесь не так?В моем коде (Вставка изображения в базу данных - C #) - PullRequest
5 голосов
/ 30 января 2012

Я пытаюсь вставить изображение в свою базу данных доступа из C # winform. Я использую следующий код:

    private void button1_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb");
        OleDbCommand cmd = con.CreateCommand();
        cmd.CommandText = "INSERT INTO Table1 (Product, Manufacturer, Description, Price, Image) VALUES ('Column1', 'Column2', 'Column3', 'Column4', @img)";
        byte[] yourPhoto = imageToByteArray(pictureBox1.Image);
        cmd.Parameters.AddWithValue("@img", yourPhoto);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

    public byte[] imageToByteArray(System.Drawing.Image iImage)
    {
        MemoryStream mMemoryStream = new MemoryStream();
        iImage.Save(mMemoryStream, System.Drawing.Imaging.ImageFormat.Png);
        return mMemoryStream.ToArray();
    }

Когда я запускаю код, он показывает мне ошибку: Syntax error in INSERT INTO statement. Что здесь не так в моем коде? Я могу успешно вставить текст в поля базы данных, используя тот же запрос.

Ответы [ 6 ]

6 голосов
/ 30 января 2012

Image - зарезервированное слово, поэтому я предполагаю, что вы должны поместить это слово в кавычки или квадратные скобки в запросе SQL.

1 голос
/ 30 января 2012

Попробуйте и добавьте параметры в другой столбец:

 private void button1_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb");
        OleDbCommand cmd = con.CreateCommand();
        cmd.CommandText = "INSERT INTO Table1 (Product, Manufacturer, Description, Price,[Image]) VALUES (@Product,@Manufacturer,@Description,@Price,@Image)";
        byte[] yourPhoto = imageToByteArray(pictureBox1.Image);
        cmd.Parameters.AddWithValue("@Product", "yourProductValue");
        cmd.Parameters.AddWithValue("@Manufacturer","yourManufacturerValue");
        cmd.Parameters.AddWithValue("@Description", "yourDescriptionValue");
        cmd.Parameters.AddWithValue("@Price","yourPriceValue");
        cmd.Parameters.AddWithValue("@Image", yourPhoto);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

public byte[] imageToByteArray(System.Drawing.Image iImage)
{
    MemoryStream mMemoryStream = new MemoryStream();
    iImage.Save(mMemoryStream, System.Drawing.Imaging.ImageFormat.Png);
    return mMemoryStream.ToArray();
}

С наилучшими пожеланиями

0 голосов
/ 30 января 2012

может быть некоторые входные данные не в хорошем состоянии, что приводит к инъекции Sql. поэтому я предлагаю вам попробовать вот так. с параметризованным запросом. также попробуйте дать хорошее описательное имя для ваших столбцов. Изображение будет неоднозначным. как это будет рассматриваться как ключевое слово.

cmd.CommandText = "INSERT INTO Table1 (Product, Manufacturer, Description, Price, [Image]) VALUES (@column1, @column2, @column3, @column4, @img )";
cmd.Parameters.AddWithValue("@column1", yourval);
cmd.Parameters.AddWithValue("@column2", yourval);
cmd.Parameters.AddWithValue("@column3", yourval);
cmd.Parameters.AddWithValue("@column4", yourval);
cmd.Parameters.AddWithValue("@img", yourPhoto);
0 голосов
/ 30 января 2012

Вы пытаетесь установить значение для параметра "@img", но в вашем запросе упоминается только "img", поэтому вместо этого вам нужно задать текст запроса следующим образом:

cmd.CommandText = "INSERT INTO Table1 (Product, Manufacturer, Description, Price, Image) VALUES ('Column1', 'Column2', 'Column3', 'Column4', @img )";
0 голосов
/ 30 января 2012

Полагаю, вы забыли добавить знак @ перед своим параметром:

    cmd.CommandText = "INSERT INTO Table1 (Product, Manufacturer, Description, Price, Image) VALUES ('Column1', 'Column2', 'Column3', 'Column4', img)";

должно быть

    cmd.CommandText = "INSERT INTO Table1 (Product, Manufacturer, Description, Price, Image) VALUES ('Column1', 'Column2', 'Column3', 'Column4', @img)";
0 голосов
/ 30 января 2012

Попробуйте ввести img как @img в запросе sql:

cmd.CommandText = "INSERT INTO Table1 (Product, Manufacturer, Description, Price, Image) VALUES ('Column1', 'Column2', 'Column3', 'Column4', @img);";

РЕДАКТИРОВАТЬ: также завершить ваш запрос SQL с '; '. Я добавил это в запросе выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...