Используя SQlite в Unity, что такое SqliteCommand для копирования таблицы из одной базы данных в другую, учитывая, что обе таблицы идентичны? - PullRequest
0 голосов
/ 08 апреля 2019

Он правильно создает таблицу Users во второй (целевой) базе данных .db, однако не заполняет ее данными таблицы Users исходной базы данных .db.Две таблицы идентичны.Ни у одного из них на самом деле даже не установлен первичный ключ.Мне нужно скопировать данные из исходной таблицы в таблицу назначения.

Я попытался выполнить следующее безуспешно для части копирования:

public class DatabaseAccess
{
    private static string _connDatabaseStringUsers = "URI=file:c:/TSV3/TS" + "DemoUsers" + ".db; Version=3; Journal Mode=Off; Synchronous=Off;";
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Linq;
using Mono.Data.Sqlite;
using System.IO;
using System.Data;
using System;

public class GameInstance : Singleton<GameInstance> {

private SqliteConnection _conn4;
private SqliteConnection _conn5;

public void Start()
{
     CreateTable();
}

public void CreateTable()
{
     _conn4 = new SqliteConnection(DatabaseAccess.ConnDatabaseStringUsers);
     _conn4.Open();

     try
     {
          SqliteCommand cmd4 = new SqliteCommand("CREATE TABLE IF NOT EXISTS Users ('ID' INTEGER, 'FileNumber' TEXT, 'FamilyName' TEXT, 'Name' TEXT, 'ParentFolderID' INTEGER, 'AvatarSex' INTEGER, 'Role' INTEGER)", _conn4);
          cmd4.ExecuteNonQuery();
     }

     catch (UnityException e)
     {
       Debug.LogError(e);
     }

     finally
     {
       _conn4.Close();
     }

     CopyTable();
}

public void CopyTable()
{
     _conn5 = new SqliteConnection(DatabaseAccess.ConnDatabaseStringUsers);
     _conn5.Open();

     try
     {
          SqliteCommand cmd5 = new SqliteCommand("SELECT * INTO Users IN 'TSDemo.db' FROM Users", _conn5);
          cmd5.ExecuteNonQuery();
     }

     catch (UnityException e)
     {
          Debug.LogError(e);
     }

     finally
     {
          _conn5.Close();
     }
   }
 }

Iожидать, что данные из таблицы Users из первой базы данных .db будут скопированы в таблицу Users из второй базы данных .db, но это не так.Тем не менее, Unity не дает мне никакой ошибки.Таблица создается, но в нее не заносятся данные.

1 Ответ

1 голос
/ 08 апреля 2019

Поскольку SQLite не поддерживает select into, вы можете использовать create table as select, если таблица не существует:

create table dest as select * from source

или insert into select, если таблица существует или вы ее создаете:

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