正如标题所示,这是我的第一个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,因此返回关键字后面不能跟一个对象表达式
答案 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...
的部分所以我建议:
using Microsoft.Office.Tools.Excel;
partial
(不太可能是其他“部分”)。ThisAddIn_Startup
和ThisAddIn_Shutdown
- 也是VSTO框架的一部分。您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)
在这里要注意的事情:
您的方法应具有返回签名(即字符串或双精度)或应具有void的返回签名。如果您希望返回字符串,则您的方法应为:
public static void MultiplyThem(string[] args)
当您从阅读器中读取值时,您需要按如下方式访问它:
myvariable = reader["field_value"].ToString();
答案 5 :(得分:2)
将myvariable.ToString
更改为myvariable.ToString()
。
将您的方法声明从public static MultiplyThem(string[] args)
更改为public static string MultiplyThem(string[] args)
。