У меня есть консольное приложение, которое я запускаю в Mac OS X через Mono. Хотя он правильно выполняется в ОС Windows, он возвращает только первый символ переменной nvarchar(max). Вот код С#:
SqlConnection myConnection = new SqlConnection(Variables.connectionString());
SqlCommand myCommand = new SqlCommand("IndexPageDetailsGet", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
SqlParameter parameterIndexPageID = new SqlParameter("@IndexPageID", SqlDbType.Int);
parameterIndexPageID.Value = indexPageID;
myCommand.Parameters.Add(parameterIndexPageID);
SqlParameter parameterIndexPageText = new SqlParameter("@IndexPageText", SqlDbType.NVarChar, -1);
parameterIndexPageText.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(parameterIndexPageText);
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
return (string)parameterIndexPageText.Value; // Only returns the first character
А вот хранимая процедура:
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 (tarball)
GTK 2.24.10
GTK# (2.12.0.0)
Версия пакета: 210090011
Int.MaxValue
(вместо -1)? Что-то вродеnew SqlParameter("@IndexPageText", SqlDbType.NVarChar, Int.MaxValue);
- person marc_s   schedule 07.07.2012