2012-01-30 39 views
5

Tôi đang cố gắng chèn một hình ảnh trong cơ sở dữ liệu truy cập của tôi từ C# winform. Tôi đang sử dụng đoạn mã sau:Có gì sai ở đây? Trong mã của tôi (Chèn hình ảnh vào cơ sở dữ liệu - C#)

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(); 
    } 

Khi tôi chạy mã nó chỉ cho tôi một lỗi: Syntax error in INSERT INTO statement. là gì sai ở đây trong mã của tôi? Tôi có thể chèn thành công văn bản vào các trường của cơ sở dữ liệu bằng cách sử dụng cùng một truy vấn.

+0

http://lh4.ggpht.com/_eknxl1DkWrU/Sd9xo_Pt8PI/AAAAAAAAA-s/cQHUuxPpBeM/s1600 -h/UploadImage% 5B3% 5D.jpg – Madhu

+0

vẫn không hoạt động sau khi thêm '@' với img. –

+0

các loại dữ liệu của cột của bạn là gì? Bạn có chắc 'Cột 4' là giá trị hợp lệ cho cột Giá không? –

Trả lời

6

Image là một từ, vì vậy tôi giả sử bạn nên đặt từ này trong dấu ngoặc kép hoặc dấu ngoặc vuông trong truy vấn SQL.

+0

anh ấy đang sử dụng truy cập MS –

+1

'Hình ảnh' vẫn là một từ dành riêng cho Jet Engine. Http://support.microsoft.com/kb/321266 không áp dụng ở đây phải không? –

+0

+1 cho từ khóa hình ảnh –

0

thử nhập img như @img trong truy vấn sql của bạn:

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

EDIT: cũng kết thúc truy vấn sql của bạn với một '; '. Tôi đã thêm nó vào truy vấn ở trên.

+1

thực sự tôi đang sử dụng cùng mã mà bạn đã đề cập, '@' còn lại trong việc sao chép mã trang web này . Tôi đã chỉnh sửa nó. –

+0

Có tất cả những gì tôi đã làm là bao gồm ký hiệu '@' trong mã của bạn. Hy vọng nó đã giúp. – Clayton

0

Tôi tin rằng bạn quên thêm một @ -Đăng trước khi tham số của bạn:

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

nên

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

Bạn cố gắng thiết lập giá trị cho tham số "@img", nhưng truy vấn của bạn chỉ đề cập đến "img", do đó, thay vào đó bạn cần đặt văn bản truy vấn như vậy:

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

có thể là một số dữ liệu đầu vào không ở dạng tốt, dẫn đến Sql injection. vì vậy tôi đề nghị bạn thử như thế này với truy vấn được tham số. cũng cố gắng cung cấp một số tên mô tả tốt cho các cột của bạn. Hình ảnh sẽ là phi thường. vì nó sẽ được coi là từ khóa.

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

xóa dấu ngoặc kép xung quanh tham số @ColumnX ở phần bên phải của CommandText :) –

1

Hãy thử điều này và thêm tham số để cột khác của bạn:

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(); 
} 

Trân trọng

Các vấn đề liên quan