我的第一个c#声明......这样做的正确方法是什么?

时间:2011-11-28 03:30:26

标签: c# mysql excel-dna

正如标题所示,这是我的第一个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”转换为非委托类型“字符串”。你打算调用这个方法吗?
错误4由于'my_test.ThisAddIn.MultiplyThem(string [])'返回void,因此返回关键字后面不能跟一个对象表达式

6 个答案:

答案 0 :(得分:5)

错误1:ToString是一种方法。你需要reader["field_value"].ToString();

错误2:所有方法都必须指定它们返回的对象类型。在这种情况下,您希望MultiplyThem返回一个字符串。 public static string MultiplyThem(string[] args)

错误3:请参阅错误1

错误4:请参阅错误2

答案 1 :(得分:3)

如果您要使用Excel-DNA,则需要取出对Visual Studio Tools for Office(VSTO)程序集的引用以及代码中的相应位 - 您不能将这两个框架混合在一起一个集会。 VSTO部分是名为Microsoft.Office.Tools...的部分所以我建议:

  1. 删除using Microsoft.Office.Tools.Excel;
  2. 您的加载项类不必是partial(不太可能是其他“部分”)。
  3. 删除ThisAddIn_StartupThisAddIn_Shutdown - 也是VSTO框架的一部分。
  4. Console.WriteLine不太可能去任何地方 - 而是使用ExcelDna.Logging.LogDisplay.WriteLine

    另一个提示:将ExcelDna.Integration.dll的引用设置为属性表中的 Copy Local:true 以供参考。这样,您就不会在输出目录中获得此程序集的不必要副本。

    如果您使用的是Visual Studio 2010,那么您的库可能会以.NET 4.0为目标。请记住在.dna文件中设置运行时版本:

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

答案 2 :(得分:2)

你走了。你有两个基本问题:

1)该方法需要指定返回类型或void。由于您返回一个字符串,我在static和方法名称之间添加了字符串。

2)ToString是一种方法。使用它时,需要添加parens,例如.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;
}

答案 3 :(得分:2)

所有错误都是不言自明的。

1)声明返回类型为string的方法:

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

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

3)最后的错误将消失。

答案 4 :(得分:2)

在这里要注意的事情:

  1. 您的方法应具有返回签名(即字符串或双精度)或应具有void的返回签名。如果您希望返回字符串,则您的方法应为:

    public static void MultiplyThem(string[] args)
    
  2. 当您从阅读器中读取值时,您需要按如下方式访问它:

    myvariable = reader["field_value"].ToString();
    
  3. ToString方法是一种方法,因此需要这样调用。

答案 5 :(得分:2)

myvariable.ToString更改为myvariable.ToString()

将您的方法声明从public static MultiplyThem(string[] args)更改为public static string MultiplyThem(string[] args)