1

私は自分のオフィス用にいくつかの winforms アプリケーションを開発しています。私のアプリケーションには、MySQL データベースに接続してデータを取得するコンボボックスが 50 個以上あります。すべてのコンボボックスは、特定の MySQL データベース列からデータを取得する必要があります。とにかく、以下のコードを使用して接続を確立し、データをコンボボックスに取得しました。

しかし今、私は非常に奇妙な問題を抱えています。私のMySQLデータベースには多くのnull値があります(一部の列には30行が含まれていますが、一部の列には1つまたは2つしか含まれていません)。データがコンボボックスを取得した後、最初のコンボボックス (2 番目の列に関連する) はデータを正しく表示しますが、2 番目の列から開始すると、1 行または 2 行しか表示されません。列の他のすべての値は表示されません。私はいくつかのフォーラムに行き、自分の al null 値を空の文字列に設定しました。しかしその後、コンボボックスは最後のフィールドの後に空白のエントリのリストを表示します。

クエリの後に IS NOT NULL も試しましたが、これも機能しません:(

この状況を克服するには?空または null 値なしで、すべてのコンボボックスにデータを取得したいと考えています。.net フレームワーク 2.0 を使用しています

これは C# または SQL クエリでプログラムによって可能ですか、それともデータベース構造を変更する必要がありますか?

(MySQL の知識がありません。ワークベンチを使用してデータベースを作成します :( )

これは私の現在のコードです

 void combobox()
    {

        string constring = string.Format("datasource='{0}';port='{1}';database='{2}';username=****************;password=************;Connect Timeout=180;Command Timeout=180", dbserverip.Text,curport.Text,currentdb.Text);
        string Query = "select * from estifdb.customconditions ;";
        MySqlConnection conn = new MySqlConnection(constring);
        MySqlCommand cmd = new MySqlCommand(Query, conn);
        MySqlDataReader myreader666;

        try
        {
            conn.Open();
            myreader666 = cmd.ExecuteReader();


            while (myreader666.Read())
            {

                string sName = myreader666.GetString("someval1");
                applicationcombobox.Items.Add(sName);

                string sName2 = myreader666.GetString("someval2");
                applicationcombobox2.Items.Add(sName2);

                string sName3 = myreader666.GetString("someval3");
                applicationcombobox3.Items.Add(sName3);

                string sName4 = myreader666.GetString("someval4");
                applicationcombobox4.Items.Add(sName4);

                string sName5 = myreader666.GetString("someval5");
                applicationcombobox5.Items.Add(sName5);


               // and 50 left
4

4 に答える 4

1

次のようなものが必要だと思います:

  while (myreader666.Read()) {
    for (int i = 0; i < myreader666.FieldCount; ++i) {
      if (reader.IsDBNull(i))
        continue;

      String fieldName = myreader666.GetName(i);
      String fieldValue = myreader666.GetValue(i).ToString();

      //TODO: write a method to find out ComboBox by field name
      ComboBox combo = GetComboByFieldName(fieldName);

      if (combo != null)
        combo.Items.Add(fieldValue);
    }
  }

フィールド名で権利を見つけるためのメソッドを実装する必要がありますComboBox

于 2014-10-15T08:38:56.573 に答える
0

SELECT ABS(column_name) AS AbsoluteA FROM YourTable のように、ABS を使用してみました

于 2014-10-15T08:36:24.690 に答える
0
if(myreader666.GetString("someval1") != null)
{
     string sName = myreader666.GetString("someval1");
     applicationcombobox.Items.Add(sName);
}

あなたはこれを行うことができます。おそらく、空の文字列をコンボボックスにも追加したくないでしょう。この場合、if(myreader666.GetString("someval1") != null && myreader666.GetString("someval1").Trim() != "")

あなたのデザインは悪いので、 for ループで答えを確認できます!

編集:

if(myreader666.GetString("someval1") != null)
{
     string sName = myreader666.GetString("someval1");
     applicationcombobox2.Items.Add(sName);
}

if(myreader666.GetString("someval2") != null)
{
     string sName2 = myreader666.GetString("someval2");
     applicationcombobox.Items.Add(sName2);
}

など

于 2014-10-15T08:37:26.863 に答える
0

次のようなことも試しましたか:

string sName = myreader666.GetString("1003");
if(sName != null && !sName.Equals(""))
    applicationcombobox.Items.Add(sName);
于 2014-10-15T08:38:02.940 に答える