1

MS Visual Studio 2012 Expressの使用、C#.NET4.0の使用。

こんにちはみんな、これは単純なものだと思います。

上司の依頼で急いでプログラムをやっていたのですが、今はもっと自由な時間があります。

だから私はそれをよりコンパクトでクリーンにするなどのコードを調べています。

私はこの1つの機能を持っています.....

public void RunMonth()
{
    //** top 10 listings*********************//            
    SetTxtBox1(DateTime.Now.ToString() + " ==== END OF MONTH REPORTS starting.........\r\n");
    SetTxtBox1(" **************************************************************************************\r\n");
    try
    {
        VRMtableDESC = querys.TopVRM("DESC");
        SetTxtBox1(DateTime.Now.ToString() + " ==== VRM Top has been loaded\r\n");
    }
    catch
    {
        SetTxtBox1(DateTime.Now.ToString() + " ==== VRM Top has FAILED\r\n");
    }
}

「VRMtableDESC」は、約18のデータテーブルの1つであるデータテーブルです。データテーブルごとに、このtryステートメントが実行されます。

お分かりのように、これは現在、すべてのテーブルに対して18回繰り返されています。代わりに、代わりにテーブルにループして、そこにデータを入力したいと思います。

これを行う方法はありますか?私が知る限り、datatablesとquery.function呼び出しのためにある種のコレクションが必要になります。

これまでのところ、私は空白を打ったので、何かが足りないことを望んでいます。

前もって感謝します

:::: UPDATE ::::わかりました、これまでにこれを設定しました...。

 foreach (DataTable tbl in MyDataSet.Tables)
 {
     tbl.TableName.Equals(querys.TopVRM(""));
 }

equalsメソッドは、メソッドの選択においても動的である必要があります。

:: UPDATE(31/10/12)::

こんにちは、エラーが発生しました。一般的なエラー「オブジェクトがオブジェクトのインスタンスに送信されていません」

foreachループのマージで表示されます。

クエリ呼び出しをデバッグしましたが、問題ないようです。

 var tables = new SortedDictionary<string, Func<DataTable>>()
        {
            {"VRMtableDESC",  () => querys.TopVRM("DESC")},
            {"VRMtableASC",   () => querys.BotVRM("ASC")},
            {"SpectableDESC", () => querys.TopSpec("DESC")},
            {"SpectableASC",  () => querys.botSpec("ASC")},
            {"ParttableDESC", () => querys.TopPart("DESC")},
            {"ParttableASC", () => querys.BotPart("ASC")},
            {"MantableDESC",  () => querys.TopManual("DESC")},
            {"MantableASC",   () => querys.BotMan("ASC")}, //why is this first to run?????
            {"UsersLockedTbl",() => querys.UserLocked()},
            {"NewUsersTbl",   () => querys.NewUsers()},

            {"VRMtotaltblTOP",   () => querys.VRMtotalTOP("")},
            {"PARTtotaltblTOP",  () => querys.PARTtotalTOP("")},
            {"SPECtotaltblTOP",  () => querys.SPECtotalTOP("")},
            {"MANtotaltblTOP",   () => querys.MANtotalTOP("")},
            {"VRMtotaltblBOT",   () => querys.VRMtotalBOT("")},
            {"PARTtotaltblBOT",  () => querys.PARTtotalBOT("")},
            {"SPECtotaltblBOT",  () => querys.SPECtotalBOT("")},
            {"MANtotaltblBOT",   () => querys.MANtotalBOT("")},
        };

        foreach(var kvp in tables)
        {
            try
            {
                MyDataSet.Tables[kvp.Key].Merge(kvp.Value());//error occurs here
                SetTxtBox1(String.Format("{0} ==== {1} has been Loaded\r\n", DateTime.Now.ToString(), kvp.Key));
            }catch(Exception e)
            {
                SetTxtBox1(String.Format("{0} ==== {1} has FAILED\r\n", DateTime.Now.ToString(), kvp.Key));
                MessageBox.Show("error:::" + e);
            }
        }
        AutoRunApp();  

どんな助けでも素晴らしいでしょう。

アップデート::

これが「bunchofquerys」クラスからのクエリ呼び出しです

 public DataTable BotMan(string order)
    {

            SqlConnection conn = new SqlConnection(myConnString32);
            SqlCommand vrm = new SqlCommand();
            //BindingSource bindme = new BindingSource();
            SqlDataAdapter adapt1 = new SqlDataAdapter(vrm);
           // DataSet dataSet1 = new DataSet();
            DataTable table1 = new DataTable();
            try
            {
            vrm.Connection = conn;
            vrm.CommandType = CommandType.StoredProcedure;
            if (order.Equals("DESC"))
            {
                vrm.CommandText = "dbo.TopManual";
            }
            vrm.CommandText = "dbo.BotManual";
            vrm.CommandTimeout = 360;

            vrm.Parameters.AddWithValue("@OrderBy", order);
            adapt1.Fill(table1);
            return table1;
        }
        catch (Exception e)
        {
            MessageBox.Show("eeror::zomg:::  " + e);

        }
        return table1;
    }
4

1 に答える 1

2

あなたはすでに持っていると言いましたDataSet。すべてのテーブルを埋める簡単な方法は、を使用することMergeです。

この例では、テーブル名(内のテーブルの名前DataSet)と対応するクエリ関数(DataTable同様のスキーマでを返し、あなたのDataSet名前はds)の間にマッピングを作成します。

は、からKey適切なクエリを実行するために使用され、次にメソッドはを「埋める」ために使用されます。DataTableDataSetMergeDataTable

var tables = new SortedDictionary<string, Func<DataTable>>() //or use List of Tuples... 
{
    {"VRM_TOP",    () => querys.TopVRM("DESC")},
    {"FooBar_TOP", () => querys.FooBar("DESC")},
    {"Something",  () => querys.Something("ASC")},
};

foreach(var kvp in tables)
    ds.Tables[kvp.Key].Merge(kvp.Value());

逆に実行して、自分の各テーブルを反復処理しDataSet、テーブルのを介して適切なローダー関数を取得することもできますTableName

これで、ブロックをループtry/catchに簡単に追加できます。foreach

foreach(var kvp in tables)
{
    try
    {
        ds.Tables[kvp.Key].Merge(kvp.Value());
        SetTxtBox1(String.Format("{0} ==== {1} has ben loaded\r\n", DateTime.Now, kvp.Key));
    }
    ...
}
于 2012-10-30T13:25:49.057 に答える