Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅更新字段类型附件MS Access C WindowForm时出错_C#_Winforms_Ms Access - Fatal编程技术网

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附件数据类型的限制,请考虑将数据库中的存储路径链接作为引用外部存储文件的字符串。然后,您的应用程序可以运行任何需要的查询。

很抱歉,我不太清楚您想做什么。您正在尝试更改列类型吗?