1

請求書情報を格納するデータベースがあります。各請求書には最大 5 つのジョブ リレーションを含めることができ、各ジョブには一意の ID 番号があります。

単一の請求書に関連するすべてのジョブを選択する select ステートメントを実行しました。

選択したジョブ ID を読み取り、それらを jobArray に格納する多くの方法を試しました。forループを使用して選択することをお勧めしますが、試した方法のほとんどはtextBoxesを使用しています(これを配列に置き換えました)

これは私の最新のコードです。

     SqlCeCommand cmdCountJobs = new SqlCeCommand("SELECT COUNT(Job_ID)AS INVCOUNT FROM Invoice WHERE Invoice_Number = " + maxInvoice + " ", cn);
        cmdCountJobs.Connection = cn;
        reader = cmdCountJobs.ExecuteReader();
        while (reader.Read())
        {
            countValue = Convert.ToInt32(reader["INVCOUNT"].ToString());
        }         
        SqlCeCommand cmdJobSearch = new SqlCeCommand("SELECT Job_ID as ID FROM Invoice WHERE Invoice_Number = " + maxInvoice + " ", cn);
        cmdJobSearch.Connection = cn;
        reader = cmdJobSearch.ExecuteReader(); 
        SqlCeDataAdapter da = new SqlCeDataAdapter(cmdJobSearch);
        jobArray[0] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[1] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[2] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[3] = (reader.Read()) ? reader["ID"].ToString() : "";
        jobArray[4] = (reader.Read()) ? reader["ID"].ToString() : "";   
        }

これで私を助けてもらえますか?

4

1 に答える 1

4

配列を使用する理由 List(Of Int)aを使用して、通常のループを使用して ID 番号を保存できます。
また、リストの性質上、配列サイズを設定するためにジョブの数を事前に知る必要がないため、4 つのジョブのみの請求書または 6 つのジョブの請求書を持つことができますが、コードのロジックは必要ありません。これを確認してください。

    List<int> jobs = new List<int>();
    SqlCeCommand cmdJobSearch = new SqlCeCommand("SELECT Job_ID as ID FROM Invoice " + 
                                "WHERE Invoice_Number = @ivc", cn);
    cmdJobSearch.Connection = cn;
    cmdJobSearch.Parameters.AddWithValue("@ivc", maxInvoice);
    reader = cmdJobSearch.ExecuteReader(); 
    while(reader.Read())
         jobs.Add(Convert.ToInt32(reader["ID"]));

また、文字列の連結を避けるためにクエリを変更したことにも注意してください。おそらくこれは当てはまりませんが、パラメーター化されたクエリを使用してSQL インジェクションを回避することをお勧めします

もちろん、コードの残りの部分で配列を使用する必要がある場合は、配列のようにリストを簡単に参照できます。

   TextBox1.Text = jobs[0].ToString();

または、リストを配列に変換して戻します

   int[] ids = jobs.ToArray();
于 2013-05-03T13:29:30.767 に答える