Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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# 使用C在SQL Server 2014的nVarChar(max)列中插入长文本#_C#_Sql Server_Nvarchar_Longtext - Fatal编程技术网

C# 使用C在SQL Server 2014的nVarChar(max)列中插入长文本#

C# 使用C在SQL Server 2014的nVarChar(max)列中插入长文本#,c#,sql-server,nvarchar,longtext,C#,Sql Server,Nvarchar,Longtext,我正在尝试从C更新SQL Server数据库中的一列,该列定义为nVarChar(max)。只要文本长度不超过4000个字符,更新就会生效。当长度为4001时,我得到了一个臭名昭著的错误: 字符串或二进制数据将被截断。 声明已终止 如果从SQLServerManagementStudio中手动运行更新,则更新将正常工作 C代码调用SP来执行更新。我在下面列出了所有相关代码: CREATE TABLE [dbo].[UpdateTable] ( [PK_ID] [int] IDENTITY

我正在尝试从C更新SQL Server数据库中的一列,该列定义为
nVarChar(max)
。只要文本长度不超过4000个字符,更新就会生效。当长度为4001时,我得到了一个臭名昭著的错误:

字符串或二进制数据将被截断。
声明已终止

如果从SQLServerManagementStudio中手动运行更新,则更新将正常工作

C代码调用SP来执行更新。我在下面列出了所有相关代码:

CREATE TABLE [dbo].[UpdateTable]
(
    [PK_ID] [int] IDENTITY(1,1) NOT NULL,
    [NEWTEXT] [nvarchar](max) NULL,

    CONSTRAINT [PK_UpdateTable] 
       PRIMARY KEY CLUSTERED  ([PK_ID] ASC)
           WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
                 IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                 ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

--DATABASE STORED PROCEDURE
CREATE Procedure [dbo].[usp_UpdateText]
    @ID int,
    @NEWTEXT nvarchar (max)    
AS
    SET NOCOUNT ON

    UPDATE [UpdateTable] 
    SET [NEWTEXT] = @NEWTEXT 
    WHERE PK_ID = @ID;

    RETURN
C#DB代码:


检查调试器中的sqlparameter结构。它可能默认为4000长度。修复了该问题!上面的代码都是正确的。问题在于辅助SP调用将DB操作记录到日志表中。日志表没有定义为nvarchar(max)的列,因此在4000个字符时失败!检查这个有用的答案检查调试器中的sqlparameter结构。它可能默认为4000长度。修复了该问题!上面的代码都是正确的。问题在于辅助SP调用将DB操作记录到日志表中。日志表没有定义为nvarchar(max)的列,因此在4000个字符时失败!检查这个有用的答案检查调试器中的sqlparameter结构。它可能默认为4000长度。修复了该问题!上面的代码都是正确的。问题在于辅助SP调用将DB操作记录到日志表中。日志表没有定义为nvarchar(max)的列,因此在4000个字符时失败!看看这个有用的答案
using System.Data;
using System.Data.SqlClient;

public static void UpdateText(AjaxObjects.TextObject obj)
{
    SqlConnection connection = DataBase.GetConnection();

    using (connection)
    {
        connection.Open();

        using (SqlCommand cmd = new SqlCommand("usp_UpdateText", connection))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@ID", SqlDbType.Int).Value = obj.Id;
            cmd.Parameters.Add("@NEWTEXT", SqlDbType.NVarChar, -1).Value = obj.Text;
            cmd.ExecuteNonQuery();
        }

        connection.Close();
    }
}