Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MonoMac控制台应用程序仅返回nvarchar的第一个字符(最大值)_C#_Sql Server_Mono_Monomac - Fatal编程技术网

C# MonoMac控制台应用程序仅返回nvarchar的第一个字符(最大值)

C# MonoMac控制台应用程序仅返回nvarchar的第一个字符(最大值),c#,sql-server,mono,monomac,C#,Sql Server,Mono,Monomac,我有一个通过Mono在MacOSX上运行的控制台应用程序。尽管它在Windows操作系统上正确执行,但它只返回nvarchar(max)变量的第一个字符。以下是C#代码: 下面是存储过程: ALTER PROCEDURE [dbo].[IndexPageDetailsGet] ( @IndexPageID int, @IndexPageText nvarchar(max) OUTPUT ) AS SELECT @IndexPageText = IndexPageText

我有一个通过Mono在MacOSX上运行的控制台应用程序。尽管它在Windows操作系统上正确执行,但它只返回nvarchar(max)变量的第一个字符。以下是C#代码:

下面是存储过程:

ALTER PROCEDURE [dbo].[IndexPageDetailsGet]
(
    @IndexPageID int,
    @IndexPageText nvarchar(max) OUTPUT
)
AS SELECT
    @IndexPageText = IndexPageText
FROM
    IndexPages
WHERE
    IndexPageID = @IndexPageID
是否有其他人目睹过这种行为和/或知道如何应对

编辑:以下是我的Mono版本信息:

MonoDevelop 3.0.3.2
运行时:
Mono 2.10.9(柏油球)
GTK 2.24.10
GTK#(2.12.0.0)

软件包版本:21009011

我找到了解决此问题的方法。我没有使用返回字符串的存储过程,而是使用返回SqlDataReader的存储过程。然后,它允许我输入一个具有完整nvarchar(max)值的字符串。因此,在C#中:

以及存储过程:

ALTER PROCEDURE
    [dbo].[IndexPagesGetByIndexPageID]
(
    @IndexPageID int
)
AS SELECT
    *
FROM
    IndexPages
WHERE
    IndexPageID = @IndexPageID

代码似乎很好-只是一个猜测-您是否尝试将参数的最大大小设置为Int.MaxValue(而不是-1)?类似于
newsqlparameter(“@IndexPageText”,SqlDbType.NVarChar,Int.MaxValue)谢谢。我尝试了您的建议,但遇到了一个异常:未处理的异常:System.Data.SqlClient.SqlException:传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。参数6(“@IndexPageText”):数据类型0xE7的数据长度或元数据长度无效。
string indexPageText = string.Empty;

SqlConnection myConnection = new SqlConnection(Variables.connectionString());
SqlCommand myCommand = new SqlCommand("IndexPagesGetByIndexPageID", myConnection);

myCommand.CommandType = CommandType.StoredProcedure;

SqlParameter parameterIndexPageID = new SqlParameter("@IndexPageID", SqlDbType.Int);
parameterIndexPageID.Value = indexPageID;
myCommand.Parameters.Add(parameterIndexPageID);

myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

while (result.Read())
{
    indexPageText = (string)result["IndexPageText"];
    break;
}
result.Close();

indexPageDetails.indexPageText = indexPageText;
ALTER PROCEDURE
    [dbo].[IndexPagesGetByIndexPageID]
(
    @IndexPageID int
)
AS SELECT
    *
FROM
    IndexPages
WHERE
    IndexPageID = @IndexPageID