C#将图片插入Ms Access

时间:2013-03-07 14:22:02

标签: c# database image insert

我要感谢在最后一个问题上提供帮助的所有人。 但现在,我有另一个声明的问题,即保存图像MS访问。 首先,我想问一下,在ms access数据库中,Datatype应该放附件吗?

我的代码:

private void button2_Click(object sender, EventArgs e)
        {

            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into Table1 (id,picture) values ('" + textBox1.Text +  "')";

            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            System.Windows.Forms.MessageBox.Show("Created", "Caption", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
            con.Close();

        }

我使用openFIledialog将我的照片插入到picturebox。

1 个答案:

答案 0 :(得分:10)

首先,使用参数。永远不要为SQL命令连接字符串,因为它会自动打开SQL注入。这是一个易于遵循的良好做法,可以避免将来遇到很多麻烦。

那就是说,这样的事情应该有效:

// You've got the filename from the result of your OpenDialog operation
var pic = File.ReadAllBytes(yourFileName);
OleDbCommand cmd = new OleDbCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into Table1 (id, picture) values (@p1, @p2)";
cmd.Parameters.AddWithValue("@p1", TextBox1.Text);
cmd.Parameters.AddWithValue("@p2", pic);
cmd.ExecuteNonQuery();

在此处引用内存,但请告诉我该代码是否会给您带来麻烦。如果我没记错的话,这样的事情应该有效。

EDIT.-如果您要在PictureBox控件上预加载图像,请将该图像转换为字节数组,然后将该字节数组用作第二个参数。

编辑(2).-稍作澄清。如果你要从文件中获取图像,那么你就可以找到它的路径;然后你可以使用File.ReadAllBytes(string path)。在我的示例中,我假设yourFileName是成功OpenDialog操作后所选文件的文件和路径名。所以你可以像这样使用它:

byte[] fromPath = File.ReadAllBytes(@"C:\walls\aurora.jpg");

并且您将从路径存储到字节数组中的图像,转换为字节并准备在插入命令中使用,如上所示。

但是如果您从图片框控件中获取图片,情况会有所不同:

MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, Imaging.ImageFormat.Jpeg);
byte[] fromControl = ms.GetBuffer();

在该示例中,我创建了一个MemoryStream,用picturebox控件的内容填充它,然后将其传递给字节数组,我们再次准备将它用作插入的参数查询。

哦,别忘了添加

using System.IO;
using System.Drawing;

给你的使用。