簡體   English   中英

如何將字符串傳遞給C#網站引用的VB.NET項目的函數?

[英]How to pass a string to a VB.NET project's function that is referenced by a C# website?

我在VB.NET項目中具有以下功能。 該函數有很多重載,但我要使用的重載如下所示:

Public Function GetScalar(ByRef commandText As String, ByRef commandType As CommandType) As Object

我試圖按如下方式在C#MVC4網站中使用該功能:

object isMaintenanceMode = sqlTool.GetScalar("ProcedureName", CommandType.StoredProcedure);

我收到以下錯誤(這使我認為它正在查找正確的重載):

Error: The best overloaded method match for 'GetScalar(ref string, ref System.Data.CommandType)' has some invalid arguments

當我在GetScalar函數上單擊鼠標右鍵,然后選擇“轉到定義”時,Visual Studio會彈出“查找符號結果”窗口。 從這里我雙擊該函數,然后轉到該類中的函數列表(它是一個文件,其中附加了關鍵字[from metadata]-它實際上不在任何項目中):

public object GetScalar(ref string commandText, ref CommandType commandType);
public object GetScalar(SqlCommand foreignCommand, CommandType commandType);
public object GetScalar(ref string commandText, ref CommandType commandType, ref bool NoTimeOut);

所以我的問題是-您是否需要做一些特別的事情(除了添加對項目的引用之外)以在C#MVC4網站中使用VB.NET項目和功能? 另外,在將字符串傳遞給函數時我做錯了什么嗎? 我是C#和MVC的新手,我正在嘗試學習。

我注意到,如果我將null作為字符串傳遞給函數,錯誤就會消失。 這顯然不是解決方案,因為我需要傳遞存儲過程名稱,但是我發現它表明我傳遞的字符串與CommandType或函數本身相反,這是有問題的。 我還嘗試過創建一個字符串變量,在其中設置名稱,然后將該變量傳遞給函數。 這也不起作用。

任何想法或建議將不勝感激。 如果您需要更多信息,請告訴我。

您需要將參數存儲在變量中,並在此處使用ref關鍵字:

var commandText = "ProcedureName";
var commandType = CommandType.StoredProcedure;
sqlTool.GetScalar(ref commandText, ref commandType);

更好的是,更新VB.NET代碼以不使用ByRef

您所看到的是C#中VB.Net函數的翻譯。 意思是ByRef的c#版本是ref 由於調用項目在c#中,因此您會在c#中看到等效的函數定義版本。 您的方法:

Public Function GetScalar(ByRef commandText As String, ByRef commandType As CommandType) As Object

在C#中是:

public object GetScalar(ref string commandText, ref CommandType commandType);  

要解決此問題,只需在參數中添加ref關鍵字:

var pName = "ProcedureName";
var commandType = CommandType.StoredProcedure;
object isMaintenanceMode = sqlTool.GetScalar(ref pName, ref commandType);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM