Я создаю приложение, которое создает базу данных SQLite по коду.
Работает нормально, я могу создать БД, Таблицы и добавить атрибуты в таблицы.
Я пытался немного его оптимизировать, взяв последовательность запросов, а затем выполняя их все вместе.
Я заметил, что последовательность SQLiteCommand не будет работать, но одна SQLiteCommand работает нормально.
Вот фрагмент кода моего кода, который работает с последовательностью:
// Insert attribute
let rec querySeq container = seq {
Console.WriteLine("More attributes? S/N")
match Console.ReadLine() with
| "S" | "s" ->
Console.WriteLine("Name?")
let atrName = Console.ReadLine()
Console.WriteLine("Type?: \n-int\n-string\n-datetime")
let atrType = Console.ReadLine()
match atrType with
| "int" ->
yield sprintf "alter table "+ TableName + " add "+atrName+" integer"
yield! querySeq container
| "string" ->
yield sprintf "alter table "+ TableName + " add "+atrName+" varchar(20)"
yield! querySeq container
| "datetime" ->
yield sprintf "alter table "+ TableName + " add "+atrName+" datetime"
yield! querySeq container
| _ -> failwith "Error in attribute choice"
| "N" | "n" -> sprintf "Done" |> ignore
| _ -> failwith("Only S/N")
}
let container = querySeq Seq.empty
printfn "%A" (Seq.toList container)
//Execute multiple
let commands = Seq.map(fun elem -> new SQLiteCommand(elem, connection) ) container
Seq.map(fun (elem : SQLiteCommand) -> elem.ExecuteNonQuery() ) commands |> ignore
//Try single query
let structureSql = sprintf "alter table "+ TableName + " add t1 varchar(20)"
Console.WriteLine(structureSql)
//Execute query
let structureCommand = new SQLiteCommand(structureSql, connection)
structureCommand.ExecuteNonQuery() |> ignore
connection.Close()
Я не совсем понимаю, почему он не работает с последовательностью команд, но работает одна,Я имею в виду, я даже не верну никакой ошибки, поэтому я не понимаю, в чем проблема.
Может ли быть проблема с подключением? Нужно ли открывать несколько подключений к одному БД?