1

私のコードではstring result、ストアドプロシージャに値を渡しています

try
{
using (SqlStoredProcedure sspObj = new SqlStoredProcedure("dbo.usp_CloseEvent", Connection, CommandType.StoredProcedure))
{
sspObj.AddParameterWithValue("@Close", SqlDbType.VarChar, 0, ParameterDirection.Input, result);
sspObj.ExecuteNonQuery();
sspObj.Dispose();
}
}
catch (Exception xObj)
{
Console.WriteLine("Error >> " + xObj.Message);
}

デフォルトSqlDbType.VarCharのサイズは 1 ~ 8000 文字です。私の質問は、変数のサイズが 8000 文字を超える場合はどうなるかですstringresult

そして、これに対する解決策は何ですか?

私のストアドプロシージャは次のようになります

ALTER PROCEDURE [dbo].[usp_CloseEvent]
    @Close      VarChar(Max)
AS

SqlStoredProcedure.cs

virtual public SqlParameter AddParameterWithValue(string parameterName,
            SqlDbType dbType,
            int size,
            ParameterDirection direction,
            object value) {

            SqlParameter p = this.AddParameter(parameterName, dbType, size, direction);

            if (value == null) {
                value = DBNull.Value;
            }

            p.Value = value;

            return p;
        }

データベースは SQL SERVER 2008 です

4

2 に答える 2

3

の場合VARCHAR(MAX)、パラメーターを追加するときにサイズとして -1 を渡す必要があります。

于 2013-01-18T12:15:48.860 に答える
0

私の質問は次のとおりです。文字列変数の結果のサイズが 8000 文字を超える場合はどうなりますか?

入力データが文字列の末尾で切り捨てられることを示すエラー メッセージが表示されます (切り捨てるとは、切り捨てることを意味します)。

そして、これに対する解決策は何ですか?

最初に、ストアド プロシージャに渡せる文字数を確認し、テーブルの列を手動で変更すると思います。

もう 1 つの方法は、SQL コマンドを使用して列定義を変更することAlter Tableです。しかし、私はこの方法をお勧めしません

于 2013-01-18T12:18:50.050 に答える