2011-11-28 51 views
2

正如標題所示,這是我第一次嘗試C#,所以請放輕鬆。 (作爲一個新手,我保證會向C#專業人員提出一些簡單的問題,以便爲您提供一些簡單的要點!)我使用ExcelDNA在Excel中創建一個UDF,它將查詢我們的mysql數據庫。我已經添加了ExcelDNA和MySQL連接器的DLL作爲參考。我有以下的代碼,這會產生一些錯誤:我的第一個c#語句...什麼是正確的方法來做到這一點?

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」非委託類型「雙」。你打算採用這種方法嗎?
錯誤2方法必須具有返回類型
錯誤3無法將方法組'ToString'轉換爲非委託類型'字符串'。你打算採用這種方法嗎?
錯誤4由於「my_test.ThisAddIn.MultiplyThem(串[])」返回void,返回關鍵字必須不能跟一個對象表達式

回答

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框架的一部分。

您的Console.WriteLine不太可能去任何地方 - 而是使用ExcelDna.Logging.LogDisplay.WriteLine

另一個提示:將對ExcelDna.Integration.dll的引用設置爲複製本地:true在屬性表中以供參考。這樣你就不會在你的輸出目錄中得到這個程序集的不必要的副本。

如果您使用的是Visual Studio 2010,則您的庫可能會以.NET 4.0爲目標。請記住在.dna文件中設置運行時版本:

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

給你。您有兩個基本問題:

1)該方法需要指定返回類型或void。既然你正在返回一個字符串,我已經添加了靜態和方法名稱之間的字符串。

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; 
} 
5

錯誤1:ToString是一種方法。您需要reader["field_value"].ToString();

錯誤2:所有方法都必須指定它們返回的對象的類型。在這種情況下,您希望MultiplyThem返回一個字符串。 public static string MultiplyThem(string[] args)

錯誤3:參見錯誤1

錯誤4:見錯誤2

2

所有誤差是相當不言自明。

1)返回類型string聲明方法:

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

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

3)最後一個錯誤會已經消失。

2

夫婦的事情,這裏要注意:

  1. 你的方法應該有一個返回簽名(即字符串或雙),還是應該有一個void返回簽名。如果您希望返回的字符串,你的方法應該是:

    public static void MultiplyThem(string[] args) 
    
  2. 當你閱讀從一個讀者的值,你需要訪問它,如下所示:

    myvariable = reader["field_value"].ToString(); 
    
  3. 的ToString方法一種方法,因此需要像這樣調用。
2

更改myvariable.ToStringmyvariable.ToString()

將您的方法聲明從public static MultiplyThem(string[] args)更改爲public static string MultiplyThem(string[] args)

相關問題