你看到的東西公然錯這行:存儲過程在C#中連接方法的輸出參數
commaSepString1 = com.Parameters["@CommaSepString"].Value.ToString();
它顯示瞭如下錯誤:
Object reference not set to an instance of an object.
對於總之, C#方法如下所示:
public static DataTable GetFilmDetails(string filmId, out string
commaSepString1)
它採用下列存儲過程(即在其自己的正確執行):
com.CommandText = "CatalogGetFilmDetails2";
而且由於@CommaSepString是在存儲過程中輸出參數,在C#中我有這樣的:
param = com.CreateParameter();
param.ParameterName = "@CommaSepString";
param.Direction = ParameterDirection.Output;
param.DbType = DbType.String;
com.Parameters.Add(param);
commaSepString1 = com.Parameters["@CommaSepString"].Value.ToString();
如果你是好奇的存儲過程,它開始像這樣: CREATE PROCEDURE CatalogGetFilmDetails2
(@FilmID int, @CommaSepString VARCHAR(50) OUTPUT) AS
的SP插入一些行到基於某些聯接表變量,它把所有的值從x列從該表爲一個字符串與逗號分隔值:
SELECT @CommaSepString = STUFF((SELECT ', ' + Categ FROM @Filme1 FOR XML PATH('')), 1,1,'')
然後它選擇該表。
感謝您的耐心閱讀。如果我發佈存儲過程和C#方法的完整代碼,會更清楚嗎?不知道我是否被允許,並擔心它可能太長而不能閱讀。
PS:必須有不對勁有關commaSepString!代碼在我將它添加到兩個地方之前完美工作。
在什麼時候你實際調用存儲過程? –
我的問題與Michael提出的問題相同。您的代碼片段不會顯示正在調用的存儲過程。由於該參數被指定爲輸出,因此不會在未調用存儲區的情況下設置該值,並將其保留爲空。您的空引用可能是由於嘗試針對該參數的值調用ToString方法。 –
代碼不希望返回數據庫NULL。 'commaSepString1 = com.Parameters [「@ CommaSepString」]。Value == DBNull.Value? null:(string)(com.Parameters [「@ CommaSepString」]。Value);' – HABO