0

このガイドに従って、C#を使用してMySQLデータベースにアクセスする方法を学習しています

これらのコードでは、List<string>[4]4つの列があるため、選択されたデータを格納するために使用されます

いくつかの実験の結果、これらのコードは次のような形式でデータを保存していることがわかりました。

//List[0] = Name1, Name2, Name3, ...

//List[1] = Age1, Age2, Age3, ...

//...

行ごとにデータにアクセスして、に表示したいListView

ただし、を使用するforeachと、データが列ごとに一覧表示されます

foreach (List<string> entry in dataEntries){
    ListViewItem lvi = new ListViewItem(entry[0]); //refer to Name1 during first loop

    lvi.SubItems.Add(entry[1]); //Name2
    lvi.SubItems.Add(entry[2]); //Name3
    lvi.SubItems.Add(entry[3]); //and so on
    listView1.Items.Add(lvi);
}

行ごとに表示する方法はありますか?または、もっと簡単な回避策はありますか?

4

2 に答える 2

2

はい、この記事はかなり悪いです。最後に記事のコードを入れました。これが私がそれをする方法です:

注:私は彼と同じようにすべてを文字列にしましたが、これは間違っているようです。また、テストしなかったため、タイプミスがある可能性があります。

class DataItem 
{
   public string id { get; set; }
   public string name { get; set; }
   public string age { get; set; }
}

//Select statement
public List<DataITem> Select()
{
    string query = "SELECT * FROM tableinfo";

    //Create a list to store the result
    List<DataItem> list = new List<DateItem>();

    //Open connection
    if (this.OpenConnection())
    {
        //Create Command
        using (MySqlCommand cmd = new MySqlCommand(query, connection))
        {
           //Create a data reader and Execute the command
           using (MySqlDataReader dataReader = cmd.ExecuteReader())
           {

              //Read the data and store them in the list
              while (dataReader.Read())
              {
                 list.Add(new DataItem() { id = dataReader["id"] + "",
                                           name = dataReader["name"] + "",
                                           age = dataReader["age"] + "" });
              }
           }

        }

        this.CloseConnection();
    }

    return list;
}

記事からのコード:

//Select statement
public List< string >[] Select()
{
    string query = "SELECT * FROM tableinfo";

    //Create a list to store the result
    List< string >[] list = new List< string >[3];
    list[0] = new List< string >();
    list[1] = new List< string >();
    list[2] = new List< string >();

    //Open connection
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Create a data reader and Execute the command
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            list[0].Add(dataReader["id"] + "");
            list[1].Add(dataReader["name"] + "");
            list[2].Add(dataReader["age"] + "");
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();

        //return list to be displayed
        return list;
    }
    else
    {
        return list;
    }
}
于 2012-08-12T14:52:40.047 に答える
1

チュートリアルのこの部分:

public List< string >[] Select()
{
    string query = "SELECT * FROM tableinfo";

    //Create a list to store the result
    List< string >[] list = new List< string >[3];
    list[0] = new List< string >();
    list[1] = new List< string >();
    list[2] = new List< string >();

    //Open connection
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Create a data reader and Execute the command
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            list[0].Add(dataReader["id"] + "");
            list[1].Add(dataReader["name"] + "");
            list[2].Add(dataReader["age"] + "");
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();

        //return list to be displayed
        return list;
    }
    else
    {
        return list;
    }
}

あなたが言及しているのは、私が思うに。結果を保存するのは良い方法ではなく、起動するための記述もかなり不十分です。あなたは同じように簡単に行うことができます:

public List<object[]> Select() {
    string query = "SELECT * FROM tableinfo";

    // Create a list to store the result
    var result = new List<object[]>();

    // Open connection
    if (this.OpenConnection()) {
        // Create Command
        var cmd = new MySqlCommand(query, connection);
        // Create a data reader and Execute the command
        MySqlDataReader dataReader = cmd.ExecuteReader();

        // Read the data and store them in the list
        while(dataReader.Read()) {
            object[] items = new object[dataReader.FieldCount];
            dataReader.GetValues(items);
            result.Add(items);
        }

        // Close Data Reader
        dataReader.Close();

        // Close Connection
        this.CloseConnection();

        // Return list to be displayed
        return list;
    } else {
        // This is a bad thing.
        throw new ApplicationException("Could not connect to database.");
    }
}

そして、私がデータベースアクセスを正しく思い出せば、これはあなたがそれをすることになっている方法です:

public DataSet Select() {
    if(!this.OpenConnection()) {
        throw new ApplicationException("Could not connect to database.");
    }

    using(var query = new MySqlDataAdapter("SELECT * FROM tableinfo", this.connection)) {
        var data = new DataSet();

        query.Fill(data);

        return data;
    }
}
于 2012-08-12T14:59:27.073 に答える