从SQL获取数据并将其放入列表/访问另一个没有静态的类?

时间:2015-07-22 08:52:25

标签: c# sql list

我在Unity中使用SQLite尝试显示数据库中的一些信息。

但是我遇到了一些问题,我不知道为了让它发挥作用而缺少什么。

public class training : MonoBehaviour {

public List<City> LoadCity()
{
    var listOfCity = new List<City>();

    string conn = "URI=file:" + Application.dataPath + "/DataBase/db_01.s3db";
    IDbConnection dbconn;
    dbconn = (IDbConnection) new SqliteConnection(conn);
    dbconn.Open(); 
    IDbCommand dbcmd = dbconn.CreateCommand();

    string sqlQuery = "SELECT r_id,r_name "+" FROM region ";
    dbcmd.CommandText = sqlQuery;
    IDataReader reader = dbcmd.ExecuteReader();

    while(reader.Read())
    {
        var city = new City();
        city.vID = Convert.ToInt32(reader["r_id"]);
        city.vName = reader["r_name"].ToString();

        listOfCity.Add(city);
    }

    reader.Close();
    reader = null;
    dbcmd.Dispose();
    dbcmd = null;
    dbconn.Close();
    dbconn = null;

    return listOfCity;

}

void OnGUI() 
{ 
    for (int ai = 0; ai < LoadCity().Count; ai++)
    {
        GUI.Button(new Rect (25, 50+(ai+1)*35, 210, 30),(City.vName[ai]));
        Debug.Log(City.vName[ai]);

    }    
}
}

{{1}}

为什么在无效GUI中我无法调用City.vName?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

试试这个:

void OnGUI()
{

    int ai = 0;
    foreach(var city in LoadCity())
    {
        GUI.Button(new Rect (25, 50+(ai+1)*35, 210, 30),(city.vName));
        Debug.Log(city.vName);
        ai++;
    }
}

如果有任何问题,请告诉我。

答案 1 :(得分:1)

因为City.vName不是静态成员,因此您无法访问该成员,请尝试使用以下代码在类中使用vName static:

NUll

事实上,你可以在不调用City.vName的情况下完成工作。在您的情况下,您可以从LoadCity()函数捕获列表,然后使用 public class City // List { public int vID { get; set; } public static string vName{ get; set; } }

从该列表中迭代访问vName

答案 2 :(得分:0)

在你的OnGui()函数中,你将所有数据加载到列表中,然后完成它。然后,当您引用City时,您不会指定特定对象,只能指示类名。因此,您需要指示特定对象以获取其值。 试试这个:

var listOfCity =LoadCity();
foreach (var city in listOfCity)
{
    GUI.Button(new Rect (25, 50+(ai+1)*35, 210, 30),(city.vName));
    Debug.Log(city.vName);

}    

}