1

複数のテーブルレコードをc#.netの個別のCSVファイルにエクスポートしたいと思います。

いう

10個のテーブルを含むリストボックス。表1をクリックすると、その表のcsvへのエクスポートが開始されます。それまでの間、リストボックスでテーブル2などの別のテーブルをクリックし、そのテーブル2のcsvへのエクスポートを開始する必要があります。一種のマルチスレッドです。以下は、csvにエクスポートするために使用するコードですが、これは1つのテーブル専用です

public void exportToCSVfile(string fileOut)
        {
            // Connects to the database, and makes the select command.

            OracleConnection conn = new OracleConnection("Data Source=" + DataSource + ";User Id=" + UserId + ";Password=" + Password);
            string sqlQuery = "SELECT * FROM " + this.lbxTables.SelectedItem.ToString().ToUpper().Trim();
            OracleCommand command = new OracleCommand(sqlQuery, conn);
            conn.Open();

            // Creates a SqlDataReader instance to read data from the table.
            using (OracleDataReader dr = command.ExecuteReader())
            {
                // Retrives the schema of the table.
                DataTable dtSchema = dr.GetSchemaTable();

                // Creates the CSV file as a stream, using the given encoding.
                using (StreamWriter sw = new StreamWriter(fileOut, false, this.encodingCSV))
                {

                string strRow; // represents a full row

                // Writes the column headers if the user previously asked that.
                if (this.chkFirstRowColumnNames.Checked)
                {
                    sw.WriteLine(columnNames(dtSchema, this.separator));
                }

                // Reads the rows one by one from the SqlDataReader
                // transfers them to a string with the given separator character and
                // writes it to the file.
                MessageBox.Show("Export to CSV has started for the Table: " + this.lbxTables.SelectedItem.ToString().ToUpper().Trim());
                while (dr.Read())
                    {
                        strRow = "";
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            strRow += Convert.ToString(dr.GetValue(i)) + separator;
                        }
                        if (separator.Length > 0)
                            strRow = strRow.Substring(0, strRow.LastIndexOf(separator));

                        sw.WriteLine(strRow);
                    }
                }
                dr.Close();
                dr.Dispose();
            }

            // Closes the text stream and the database connenction.

            conn.Close();

            //// Notifies the user.
            MessageBox.Show("Export to CSV has completed for the Table: " + this.lbxTables.SelectedItem.ToString());
        }

スレッドを使用して複数のテーブルデータを処理する方法を教えてください

4

1 に答える 1

2

ここでは、c# でのスレッド化のチュートリアルを紹介します。基本的に、エクスポート メソッドをスレッド メソッドとして使用する必要があります。作成するすべてのスレッドにハンドラーを保持することをお勧めします。

より具体的には...ステップ1)エクスポーターのクラスを作成する

public class CSVExport
{
    // This method that will be called when the thread is started
    public void exportToCSVfile(object fileOut)
    {
        ...
    }
};

ユーザーがエクスポートするテーブルを選択すると、次のように実行します

CSVExport obj = new CSVExport();
Thread t = new Thread (CSVExport.exportToCSVfile);
t.Start(oFileName);

ファイル名が一意であることを確認する必要があります。前に述べたように、すべてのスレッド ハンドラーをリストに保持することをお勧めします。

于 2013-01-03T12:05:57.273 に答える