C#插入图片到微软的Access(C# Insert Picture into Ms Access)

2019-07-21 04:24发布

我想感谢所有谁在最后一个问题有帮助。 但现在,我有问题,这是saveimageto MS访问的另一个说法。 首先,我想问一下,MS Access数据库,数据类型应该把附件?

我的代码:

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

        }

我插入我的图片PictureBox的使用打开文件对话框。

Answer 1:

首先,使用参数。 NEVER CONCAT字符串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控件的图像,该图像转换为字节数组,然后使用字节数组作为第二个参数。

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

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

和你存储到字节数组fromPath图像,转换成字节,并且准备在插入命令以用作上面看到。

如果你是从一个图片框控件让你的形象,事情有一点不同:

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

在我创建了一个这个例子MemoryStream ,与PictureBox控件的内容填充,然后将其传递到字节数组,并再次我们就可以使用它作为我们插入查询参数。

哦,不要忘了添加

using System.IO;
using System.Drawing;

您usings。



文章来源: C# Insert Picture into Ms Access