3

タイトルの通り、C#初挑戦なのでお手柔らかにお願いします。(初心者として、簡単なポイントを得るために、C# のプロに簡単な質問をたくさんすることをお約束します!) 私は ExcelDNA を使用して、Excel で UDF を作成しています。これは、mysql データベースにクエリを実行します。ExcelDNA と mysql コネクタ dll を参照として追加しました。いくつかのエラーを生成する次のコードがあります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;  
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
using ExcelDna.Integration;
using MySql.Data.MySqlClient;

namespace my_test
{
public partial class ThisAddIn
{
    [ExcelFunction(Description = "Multiplies two numbers", Category = "Useful functions")]
    public static MultiplyThem(string[] args)
    {

        string connString = "Server=localhost;Port=3306;Database=test;Uid=root;password=p-word";
        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.ToString;
    }




    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
    }

}
}

エラーは次のとおりです。

エラー 1 メソッド グループ 'ToString' を非デリゲート型 'double' に変換できません。メソッドを呼び出すつもりでしたか?
エラー 2 メソッドには戻り値の型が必要です
エラー 3 メソッド グループ 'ToString' を非デリゲート型 'string' に変換できません。メソッドを呼び出すつもりでしたか?
エラー 4 'my_test.ThisAddIn.MultiplyThem(string[])' は void を返すため、return キーワードの後に​​オブジェクト式を続けてはなりません

4

6 に答える 6

5

エラー 1:ToStringメソッドです。あなたが必要reader["field_value"].ToString();

エラー 2: すべてのメソッドは、返すオブジェクトの型を指定する必要があります。この場合、MultiplyThem が文字列を返すようにします。public static string MultiplyThem(string[] args)

エラー 3: エラー 1 を参照

エラー 4: エラー 2 を参照

于 2011-11-28T03:34:22.727 に答える
3

Excel-DNA を使用する場合は、Visual Studio Tools for Office (VSTO) アセンブリへの参照と、コード内の対応する部分を削除する必要があります。2 つのフレームワークを 1 つのアセンブリに混在させることはできません。VSTO パーツは、次のように呼ばれるものMicrosoft.Office.Tools...です。

  1. を取り外しますusing Microsoft.Office.Tools.Excel;
  2. アドイン クラスである必要はありませんpartial(他の「パーツ」は存在しない可能性があります)。
  3. ThisAddIn_Startupand ThisAddIn_Shutdown- も VSTO フレームワークの一部を削除します。

あなたConsole.WriteLineはどこにも行かないでしょう - むしろ使用してExcelDna.Logging.LogDisplay.WriteLineください。

もう 1 つのヒント: 参照用のプロパティ シートで、ExcelDna.Integration.dll への参照をCopy Local: trueに設定します。そうすれば、出力ディレクトリにこのアセンブリの不要なコピーが作成されなくなります。

Visual Studio 2010 を使用している場合、ライブラリはおそらく .NET 4.0 を対象としています。.dna ファイルでランタイム バージョンを設定することを忘れないでください。

<DnaLibrary RuntimeVersion="v4.0" >
    <ExternalLibrary Path="MyAddIn.dll" />
</DnaLibrary>
于 2011-11-28T06:00:46.900 に答える
2

どうぞ。2 つの基本的な問題があります。

1) メソッドには、指定された戻り値の型または void が必要です。文字列を返すので、静的とメソッド名の間に文字列を追加しました。

2) ToString はメソッドです。使用するときは、.ToString() などの括弧を追加する必要があります。

public static string MultiplyThem(string[] args)
{

    string connString = "Server=localhost;Port=3306;Database=test;Uid=root;password=p-word";
    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;
}
于 2011-11-28T03:34:04.197 に答える
2

すべてのエラーは、一目瞭然です。

1) 戻り値の型でメソッドを宣言しますstring:

public static string MultiplyThem(string[] args)
//            ^^^^^^

2) 使用ToString():return myvariable.ToString();

3) 最後のエラーはなくなります。

于 2011-11-28T03:35:18.747 に答える
2

ここで注意すべき点がいくつかあります。

  1. メソッドにはリターン シグネチャ (つまり、string または double) が含まれているか、void のリターン シグネチャが必要です。文字列を返したい場合は、メソッドを次のようにする必要があります。

    public static void MultiplyThem(string[] args)
    
  2. リーダーから値を読み取るときは、次のようにアクセスする必要があります。

    myvariable = reader["field_value"].ToString();
    
  3. ToString メソッドはメソッドであるため、メソッドとして呼び出す必要があります。
于 2011-11-28T03:36:34.907 に答える
2

に変更myvariable.ToStringmyvariable.ToString()ます。

メソッド宣言を からpublic static MultiplyThem(string[] args)に変更しますpublic static string MultiplyThem(string[] args)

于 2011-11-28T03:37:20.920 に答える