Как выполнить сборник утверждений в тиберии? - PullRequest
0 голосов
/ 23 октября 2019

Я не мог понять, как перебирать коллекцию и выполнять операторы один за другим с Тибериусом.

Мой текущий код выглядит так (упрощенно):

use futures::Future;
use futures_state_stream::StateStream;
use tokio::executor::current_thread;
use tiberius::SqlConnection;

fn find_files(files: &mut Vec<String>) {
    files.push(String::from("file1.txt"));
    files.push(String::from("file2.txt"));
    files.push(String::from("file3.txt"));
}

fn main() {
    let mut files: Vec<String> = Vec::new();
    find_files(&mut files);

    let future = SqlConnection::connect(CONN_STR)
        .and_then(|conn| {
            conn.simple_exec("CREATE TABLE db.dbo.[Filenames] ( [Spalte 0] varchar(80) );")
        })
        .and_then(|(_, conn)| {
            for k in files.iter() {
                let sql = format!("INSERT INTO db.dbo.Filenames ([Spalte 0]) VALUES ('{}')", k);
                &conn.simple_exec(sql);
            }
            Ok(())
        });

    current_thread::block_on_all(future).unwrap();
}

Я получилследующее сообщение об ошибке

error[E0382]: use of moved value: `conn`
  --> src/main.rs:23:18
   |
20 |         .and_then(|(_, conn)| {
   |                        ---- move occurs because `conn` has type `tiberius::SqlConnection<std::boxed::Box<dyn tiberius::BoxableIo>>`, which does not implement the `Copy` trait
...
23 |                 &conn.simple_exec(sql);
   |                  ^^^^ value moved here, in previous iteration of loop

Я новичок в Rust, но знаю, что с использованием переменной conn что-то не так, но ничего не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...