使用C#在Ms访问中以Attachment数据类型存储文件

时间:2016-03-23 01:44:39

标签: c# ms-access-2010

我收到此错误

enter image description here

我不明白为什么我一直收到此错误,因为我的插入声明中甚至没有任何多值字段。

con = new OleDbConnection(cs);
            con.Open();

            string fnum = lblFNum.Text;               
            string num = lblPnum.Text.ToString();
            FileInfo file = new FileInfo(lblFile.Text);
            string a = "INSERT INTO Documents([FileNumber], [ProjectID], [File]) VALUES('" + fnum + "','" + num + "','" + file + "')";

            cmd = new OleDbCommand(a);
            cmd.Connection = con;
            cmd.ExecuteReader();
            con.Close();
            MessageBox.Show("Document Successfully Added", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);

我需要用什么代码来解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,您应该在查询中使用参数,它将阻止SQL注入。

其次,您试图将FileInfo放入查询中,但这不起作用。您必须将文件读入byte []并将其保存到数据库中。

示例:

var fileData = File.ReadAllBytes(lblFile.Text); // You should also check if file exists...

cmd.CommandText = "INSERT INTO Documents([FileNumber], [ProjectID], [File]) VALUES(@fileNumber, @projectId, @file)";
cmd.Parameters.AddWithValue("@fileNumber", fnum);
cmd.Parameters.AddWithValue("@projectId", num);
cmd.Parameters.AddWithValue("@file", fileData);