0

MySQL データベースから取得した結果を DataTable に入力しようとしていますが、DataTable は初期化されていますが、入力されません。この DataTable を使用して ListView を埋めたかったのです。DataTable の設定については、次のとおりです。

    public DataTable SelectCharacters(string loginName)
    {
        this.Initialise();
        string connection = "0.0.0.0";
        string query = "SELECT * FROM characters WHERE _SteamName = '" + loginName + "'";

        if (this.OpenConnection() == true)
        {
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataAdapter returnVal = new MySqlDataAdapter(query,connection);
            DataTable dt = new DataTable("CharacterInfo");
            returnVal.Fill(dt);
            this.CloseConnection();
            return dt;
        }
        else
        {
            this.CloseConnection();
            DataTable dt = new DataTable("CharacterInfo");
            return dt;            
        }
    }

そして、ListView を埋めるために、私は持っています:

 private void button1_Click(object sender, EventArgs e)
    {
        string searchCriteria = textBox1.Text;

        dt = characterDatabase.SelectCharacters(searchCriteria);
        MessageBox.Show(dt.ToString());

        listView1.View = View.Details;

        ListViewItem iItem;
        foreach (DataRow row in dt.Rows)
        {
            iItem = new ListViewItem();
            for (int i = 0; i < row.ItemArray.Length; i++)
            {
                if (i == 0)
                    iItem.Text = row.ItemArray[i].ToString();
                else
                    iItem.SubItems.Add(row.ItemArray[i].ToString());
            }
            listView1.Items.Add(iItem);
        }
    }

足りないものはありますか?MessageBox が含まれていたので、データが入力されているかどうかを確認できましたが、うまくいきませんでした。

ご協力いただきありがとうございます。

4

5 に答える 5

4

さて、私は...ここで何をしたのか理解できないので、datagridviewに入力しているコードを貼り付けます:

1) 接続は次のようになります (localhost がサーバーの場合、そうでない場合はサーバー マシンの IP アドレス):

string connection = @"server=localhost;uid=root;password=*******;database=*******;port=3306;charset=utf8";

2)クエリは問題ありません(何かが返されます)が、そのようなSQLステートメントを作成しないでください.代わりにパラメーターを使用してください。SQL インジェクションを参照してください。

3) コード:

void SelectAllFrom(string query, DataGridView dgv)
        {
            _dataTable.Clear();

            try
            {
                _conn = new MySqlConnection(connection);
                _conn.Open();
                _cmd = new MySqlCommand
                {
                    Connection = _conn,
                    CommandText = query
                };
                _cmd.ExecuteNonQuery();

                _da = new MySqlDataAdapter(_cmd);
                _da.Fill(_dataTable);

                _cb = new MySqlCommandBuilder(_da);

                dgv.DataSource = _dataTable;
                dgv.DataMember = _dataTable.TableName;
                dgv.AutoResizeColumns();

                _conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (_conn != null) _conn.Close();
            }
        }

したがって、mysql データベースのテーブルのコンテンツを表示するたびに、このメソッドを呼び出し、クエリ文字列とデータグリッドビュー名をそのメソッドに渡します。そして、それだけです。

あなたのために、この例とあなたの例を比較して、両方から何が使えるか見てください。たぶん、リストビューはあなたにとって最善のものではありません.

これが少し役立つことを願っています。

于 2012-12-24T11:33:33.963 に答える
0

ここで、コードが機能しない理由を以下に示します。

  1. 接続
    mySQLの接続が無効です
  2. クエリ
    で検索しますかtable、このクエリを試してください

string query = "SELECT * FROM characters WHERE _SteamName LIKE '" + loginName + "%'";

に注意しLIKE%ください。これは、すべてのデータを一覧表示するのに役立ちます。
詳細については、文字列比較関数

于 2012-12-24T11:54:00.247 に答える
0

アプリケーションをデバッグし、SQL ステートメント/接続文字列が正しく、何らかの値を返すかどうかを確認し、アプリケーションが例外をスローしていないかどうかも確認します。

于 2012-12-24T11:08:13.300 に答える
0

接続文字列が無効です。

次のように設定します。

connection = "Server=myServer;Database=myDataBase;Uid=myUser;Pwd=myPassword;";

参照: mysql 接続文字列

于 2012-12-24T11:31:56.520 に答える