c#在Ms Access中插入图片

本文关键字:插入 Access Ms | 更新日期: 2023-09-27 18:02:51

我要感谢所有在上一个问题上帮助我的人。但现在,我有另一个语句的问题,这是保存图像到MS访问。首先,我想问一下,在ms访问数据库时,Datatype应该放附件吗?

my code:

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

c#在Ms Access中插入图片

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

首先,使用参数。永远不要为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();

引用记忆在这里,但如果代码给你带来麻烦,请告诉我。如果我没记错的话,应该是这样的。

编辑。-如果你在PictureBox控件上预加载图像,将该图像转换为字节数组,然后使用该字节数组作为第二个参数。

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

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

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

BUT如果你从图片框控件获取图像,情况就有点不同了:

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

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

哦,别忘了加上

using System.IO;
using System.Drawing;

的使用。