3

MSSQL2005データベースがあります。データはExcelシートからこのデータベースにアップロードされます。これらのExcelシートはさまざまなベンダーから提供されており、それらのほとんどは事前定義された構造を維持していないため、個別の挿入/更新モジュールを作成できます。これまで、事前定義された形式のExcelシートを受け入れ、そこからデータをアップロードするモジュールを作成しました。すべてのベンダーにとって、誰かが事前定義された方法で手動でフォーマットする必要がありますが、これには時間がかかり、ロバの作業です。

これで、手動フォーマットが削除され、すべてのデータベース列が1つの列に配置され、すべてのExcel列を含むドロップダウンが別の列に配置されました。ユーザーは目的の列をマップし、データベースを更新します。

ただし、ほとんどの場合、この単純なマッピングは不十分です。これは、ほとんどの場合、何らかのロジックに基づいて値を分割/結合する必要があるためです。よりユーザーフレンドリーにするために、そして私のユーザーのほとんどはそれ自体がC#プログラマーであるため、ドロップダウンを削除し、ユーザーが直接ロジックを入力できるテキストボックスを使用することにしました。例えば:

dbcol1 = excel[col1].ToString().Replace("-"," ")
    +(int.Parse( excel[col6].ToString())*.1).ToString();

これを検索しているときに、C#コードを動的にコンパイルしていることに気付きました。私はこれまでそうしたことがなく、この方法が効率的かどうかもわかりませんので、これで正しい方向に進んでいることを知る必要があります。または、これを行うためのより効率的で高速な方法はありますか?

4

2 に答える 2

3

通常はReflection.Emit、その場で.NETアセンブリを生成し、それを実行するために使用します。ただし、C#ではなく、中間言語の命令のみを受け入れます。また、コードを実行するたびにまったく新しいアセンブリを作成することは、まったく効率的ではありません。


Roslynは、サービスとしてのコンパイラに対するMicrosoftの試みです。これは、C#およびVB.Net用に書き直された新しいコンパイラであり、アプリケーションから呼び出してコードをコンパイルでき、コンパイルするコードに関する情報を提供します。

Anders Hejlsberg(私は信じています)は、Roslynコンパイラを使用してC#スクリプトインターフェイスを実装する例を示しました。C#を入力すると、その場で実行されます。Roslynはまだ開発中ですが、 Roslyn CTPを試して、ニーズに対応できるかどうかを確認することをお勧めします。

Roslynを使用した.NETアプリケーションのスクリプト言語としてのC#は、CodeProjectの記事です。


最後に、Roslynを(まだ)使用できない、または使用したくない場合、またはRoslynが目的の実行速度を提供しない場合、(パフォーマンスの観点から)最善の策はスクリプトを解析して解釈することだと思います。自分でコーディングします。ただし、これはエラーが発生しやすいハードワークです。

于 2013-03-11T11:54:31.807 に答える
3

スクリプトを作成しますか?C#スクリプトは、コードをその場でコンパイルして実行する場合に非常に便利です。

正しいC#で文字列形式を設定できる場合は、コンパイルして実行できます。

http://www.csscript.net/

例えば:

dynamic script = CSScript.Evaluator
                         .LoadMethod(@"void SayHello(string greeting)
                                       {
                                           Console.WriteLine(greeting);
                                       }");
script.SayHello("Hello World!");

おそらく本番環境には向いていませんが、少なくともアイデアのプロトタイプを作成することはできます

于 2013-03-11T12:03:38.093 に答える