当我在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();
答案 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();