首页 > 解决方案 > 使用 DAO 将附件上传到 Access 时如何过滤查询?不接受“WHERE”

问题描述

我需要上传一个文件并将其放在用户输入的名称的 Access 内的同一行中。

尝试使用不同的查询:

Recordset rs = db.OpenRecordset("SELECT * FROM tbl_reg WHERE nome_user = @nome ", RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic);

还尝试删除 WHERE,是的,它确实选择了整个表,每当我放置 WHERE 时,我都会看到“参数太少。预期为 1”。

if (FileUpload1.HasFile)
            {
                try
                {
                    string fileExtension = Path.GetExtension(FileUpload1.FileName);
                    if (fileExtension.ToLower() == ".doc" || fileExtension.ToLower() == ".docx" || fileExtension.ToLower() == ".pdf")
                    {
                        if (FileUpload1.PostedFile.ContentLength > 1024000)
                        {
                            StatusLabel.ForeColor = System.Drawing.Color.Red;
                            StatusLabel.Text = "Status do upload: O arquivo deve ter menos de 1000 kb!";
                        }
                        else
                        {
                            string conexaoAccess = ConfigurationManager.ConnectionStrings["conexaoAccess"].ToString();
                            using (OleDbConnection conexaodb = new OleDbConnection(conexaoAccess))
                            {
                                conexaodb.Open();

                                OleDbCommand cmd = new OleDbCommand("UPDATE tbl_reg SET titulo_trab = @trab WHERE nome_user = @nome", conexaodb);
                                var parTrab = cmd.CreateParameter();
                                parTrab.ParameterName = "@trab";
                                parTrab.DbType = DbType.String;
                                parTrab.Value = mdl.trab;
                                cmd.Parameters.Add(parTrab);

                                var parNome = cmd.CreateParameter();
                                parNome.ParameterName = "@nome";
                                parNome.DbType = DbType.String;
                                parNome.Value = mdl.nome;
                                cmd.Parameters.Add(parNome);

                                int rowsChanged = cmd.ExecuteNonQuery();

                                //arquivo
                               try
                                {
                                    Random r = new Random();
                                    int n = r.Next();
                                    DBEngine dbe = new DBEngine();
                                    Database db = dbe.OpenDatabase("C:\\Users\\Willian\\Documents\\dbPIM\\dbpim.accdb", false, false, "");
                                    Recordset rs = db.OpenRecordset("SELECT * FROM tbl_reg WHERE nome_user = @nome  ", RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic);
                                    rs.MoveFirst();
                                    rs.Edit();
                                    Recordset2 rs2 = (Recordset2)rs.Fields["Campo1"].Value;
                                    rs2.AddNew();

                                    Field2 f2 = (Field2)rs2.Fields["campo"];

                                    f2.LoadFromFile("C:\\temp\\test" + n + fileExtension.ToLower());
                                    rs2._30_Update();
                                    rs2.Close();

                                    rs._30_Update();
                                    rs.Close();
                                    }

                                        catch (Exception ex)
                                        {
                                            Console.WriteLine(ex.ToString());
                                        }

预期输出:如果键入的名称与连续的任何名称匹配,则文件将附加到 .mdb。第一个查询执行得很好,但openRecordSet根本没有。

标签: c#sqlasp.netdao

解决方案


推荐阅读