Как отфильтровать запрос при использовании DAO для загрузки вложений в Access? "ГДЕ" не принято - PullRequest
0 голосов
/ 06 ноября 2019

Мне нужно загрузить файл и поместить его в ту же строку внутри Доступа к имени, набранному пользователем.

попытался использовать другой запрос:

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

* WHEи да, он выбирает всю таблицу, всякий раз, когда я помещаю ГДЕ, я ловлю «Слишком мало параметров. Ожидаемый 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 вообще не выполняется.

...