2011-12-03 6 views
1

私はExcelのプラグインを作成し、ExcelDNAを初めて使用するC#を初めて使用しました。私はhttp://exceldna.codeplex.com/wikipage?title=Getting%20Startedで作業している例を得ました。 UDF "MultiplyThem"は期待どおりに動作します。ExcelDNAとMysql

mysqlデータベースからデータを取得するために、そのサイトのサンプル#3を変更するとします。 ExcelDna.Integration.dllだけでなく、プロジェクトのMySql.Data.dllも参照しています。私はこの文でそれをコンパイルします。

c:\windows\microsoft.net\framework\v2.0.50727\csc.exe /target:library /reference:ExcelDna.Integration.dll /reference:MySql.Data.dll TestLib.cs 

私は(この場合は、「= MultiplyThem()」)でExcelは、追加して、私のUDFに入力を開始開くときに「MultiplyThem」と呼ばれる全くUDFはありません。なぜそれは突然仕事をやめたのですか?

using ExcelDna.Integration; 
using MySql.Data.MySqlClient; 
using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Data; 

public class MyFunctions 
{ 
[ExcelFunction(Description = "Grabs data from database", Category = "Useful functions")] 
public static string MultiplyThem(string[] args) 
{ 
    string connString = "Server=localhost;Port=3306;Database=test;Uid=root;password=pword"; 
    MySqlConnection conn = new MySqlConnection(connString); 
    MySqlCommand command = conn.CreateCommand(); 
    command.CommandText = "SELECT field_value FROM customers"; 
    try 
    { 
     conn.Open(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

    string myvariable = "bad"; 

    MySqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     myvariable = reader["field_value"].ToString(); 
    } 

    return myvariable; 
} 
} 

そして、私のTest1.dnaファイル(私は私のプロジェクトでの.NET Framework 4をターゲットにしています):

<DnaLibrary RuntimeVersion="v4.0"> 
    <ExternalLibrary Path="TestLib.dll"/> 
</DnaLibrary> 
+0

あなたはあなたのDLLを持っているフォルダにMySql.Data.MySqlClient DLLをドロップしようとしましたか?その依存関係を特定することが問題の原因であるかどうかを確認するのに役立ちます。 – Mathias

+0

MySql.Data.dllを意味しましたか? (どこでもMySql.Data.MySqlClient.dllファイルが見つかりませんでした)。 MySql.Data.dllがフォルダにあり、参照しています。 – usr951

答えて

2

エクセル-DNAは、現在のパラメータとして文字列の配列をサポートしていません。ここに私のC#のコードです。文字列[] argsをobject [] argsに変更すると、それはうまくいくはずです。

+0

それはそれでした。どうも! – usr951

+0

静的変数には、通常は接続と、おそらくパラメータ付きの準備済みのSqlCommandをキャッシュします。各関数呼び出しは既に設定されているかどうかをチェックし、可能であればパラメータを再バインドして既存の接続とコマンドを使用して実行します。 – Govert

+0

接続キャッシュには、.NetにThreadPoolがあります。これを気にする必要はありませんが、接続文字列paramsで設定することができます。 –