C# 仅更新字段类型附件MS Access C WindowForm时出错
它可以更新字段类型文本C# 仅更新字段类型附件MS Access C WindowForm时出错,c#,winforms,ms-access,C#,Winforms,Ms Access,它可以更新字段类型文本 string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test.accdb;"; using (OleDbConnection MyConn = new OleDbConnection(ConnStr)) { MyConn.Open(); var StrCmd = "UPDATE Table1 SET Field
string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test.accdb;";
using (OleDbConnection MyConn = new OleDbConnection(ConnStr))
{
MyConn.Open();
var StrCmd = "UPDATE Table1 SET Field1 = @p2 WHERE ID = @p1";
OleDbCommand oldcommand = new OleDbCommand(StrCmd, MyConn);
byte[] pic = File.ReadAllBytes(@"D:\test.png");
oldcommand.CommandType = CommandType.Text;
oldcommand.CommandText = StrCmd;
oldcommand.Parameters.AddWithValue("@p2", "test");
oldcommand.Parameters.AddWithValue("@p1", "1");
try
{
oldcommand.ExecuteNonQuery();
}
catch (Exception ex)
{
}
但它不能更新字段类型附件
错误:没有为一个或多个必需参数提供值
string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test.accdb;";
using (OleDbConnection MyConn = new OleDbConnection(ConnStr))
{
MyConn.Open();
var StrCmd = "UPDATE Table1 SET Field2.Value = @p2 WHERE ID = @p1";
OleDbCommand oldcommand = new OleDbCommand(StrCmd, MyConn);
byte[] pic = File.ReadAllBytes(@"D:\test.png");
oldcommand.CommandType = CommandType.Text;
oldcommand.CommandText = StrCmd;
oldcommand.Parameters.AddWithValue("@p2", pic);
oldcommand.Parameters.AddWithValue("@p1", "1");
try
{
oldcommand.ExecuteNonQuery();
}
catch (Exception ex)
{
}
使用MS Access 2007在ACE引擎中引入的字段是一个字段,它实际上在Access GUI中隐藏的每条记录中包含多个字段:
文件名
文件扩展名
文件的二进制内容
因此,您可能无法运行任何查询,包括选择连接、更新或直接附加查询。事实上,您不能使用这种字段类型运行。您可能只能使用Access GUI来管理字段
通常,一场经常性的辩论,特别是关于在数据库或文件系统中存储媒体或其他二进制内容文档、PDF等的辩论。可移植性是前者的巨大优势,而性能则是后者的巨大优势。由于ACE附件数据类型的限制,请考虑将数据库中的存储路径链接作为引用外部存储文件的字符串。然后,您的应用程序可以运行任何需要的查询。很抱歉,我不太清楚您想做什么。您正在尝试更改列类型吗?