内置Unity项目,未打开MySQL数据库

时间:2019-12-24 19:08:44

标签: c# mysql database visual-studio unity3d

当我在Unity Editor中运行项目时,可以运行数据库。我可以毫无问题地对其进行读写。但是,当我构建我的项目并运行它时,在读取数据库的那一刻什么也没有发生。 我已将其设置为在读取数据库时创建文本文件以检查是否已读取,但未创建文本文件。由此,我可以假设数据库连接没有打开。 我正在使用LocalHost中的MySQL数据库。 有没有一种将数据库放在项目文件中的方法,以便无论程序在哪里(例如,在另一台计算机上)都可以访问该数据库,并使该数据库可读取?好像它是一个文本文件。这就是我所需要的。该数据库具有许多表,并且在游戏运行时都可以从我的C#脚本访问所有表。 我确实有用于连接的密码,但是未将其包含在下面的代码中。 我需要一个非常简单的解决方案,因为仅在本地需要数据才能存储玩家的进度,因此如果可能的话,不需要服务器托管它。

public string location = @"server=localhost;user=root;database=wattsup;port=3306;Allow User Variables=True"; //Path to database

    MySqlConnection con = new MySqlConnection(location);
    con.Open();
    MySqlCommandBuilder cmdBuilder = new MySqlCommandBuilder();
    string tbname = cmdBuilder.QuoteIdentifier(name1);
    string query = "SELECT Question FROM " + tbname + " WHERE ID = @value";
    MySqlCommand command = new MySqlCommand(query, con);
    command.Parameters.AddWithValue("@value", Equations[EquationValue].EquationID);
    MySqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        SpaceGame.question = Convert.ToString(reader[0]);
        string fileName = @"Question.txt";
        //text file created to show me whether it is opened or not
        using (StreamWriter fileStream = File.CreateText(fileName))
        {
            fileStream.WriteLine(SpaceGame.question);
        }
    }
    con.Close();

1 个答案:

答案 0 :(得分:0)

如果要将数据存储在单个文件中,则可以尝试SQLite。以下是使用SQLite可以参考的步骤。

1。使用NuGet Package Manager安装System.Data.SQLite。

2。在App.config

中配置连接字符串

<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
  <connectionStrings>
     <add name="SQLiteDbContext" connectionString="Data Source=MyDatabase.sqlite" providerName="System.Data.SQLite.EF6" />
  </connectionStrings>
</configuration>

3。创建.sqlite的简单演示。

// create
SQLiteConnection.CreateFile("MyDatabase.sqlite");

SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite");
m_dbConnection.Open();

string sql = "create table highscores (name varchar(20), score int)";

SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();

sql = "insert into highscores (name, score) values ('Me', 9001)";

command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();// read
SQLiteCommand sqlCom = new SQLiteCommand("Select * From highscores", m_dbConnection);

SQLiteDataReader sqlDataReader = sqlCom.ExecuteReader();

int i = 1;
while (sqlDataReader.Read())
{
    listBox1.Items.Add(i);
    listBox1.Items.Add(sqlDataReader.GetValue(0));
    listBox1.Items.Add(sqlDataReader.GetValue(1));
    i++;
}

m_dbConnection.Close();