繁体   English   中英

插入SQL Server数据库时文本被截断

[英]Text is being truncated on Insert into SQL Server database

使用SqlCommand将数据插入SQL Server数据库时,我们遇到了一个奇怪的问题。 如果我们尝试在konnotiz1列中插入一个大文本,则会在43245个字符后截断该文本。 由于某种原因,我不明白真正的应用程序代码创建42909个字符。

这是列属性页面的屏幕截图:

SQL-Server Management Studio属性页

以下代码导致问题:

static void Test()
{
    using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(getConString()))
    {
        con.Open();
        System.Data.SqlClient.SqlCommand cmd = con.CreateCommand();
        cmd.CommandText = "Insert into kontakte (konlfdnr, konNotiz1) values (@konlfdnr, @konNotiz1)";
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = 60;

        // you can ignore this param, it's owner pk-column. 
        System.Data.SqlClient.SqlParameter param = cmd.Parameters.Add("@konlfdnr", SqlDbType.Char, 10);

        // better don't ask why we have to pad this... ;) 
        param.Value = "1".PadLeft(10);
        param.Direction = ParameterDirection.Input;

        param = cmd.Parameters.Add("@konNotiz1", SqlDbType.Text);
        param.Direction = ParameterDirection.Input;
        param.Value = getParamValue();

        cmd.ExecuteNonQuery();
        con.Close();
    }
}

private static string getParamValue()
{
     // my Textfile has something about 300000 characters. It's a html code from a mail.
     return System.IO.File.ReadAllText("C:\\Temp\\insert.txt");
}

private static string getConString()
{ 
    return @"Data Source=NB-JH1\SQLEXPRESS;Initial Catalog=Testsystem_Local;Integrated Security=True;Encrypt=True;TrustServerCertificate=True;Pooling=True;MultipleActiveResultSets=True;
}

有没有人有想法,为什么文本被截断以及我们如何才能使这个工作?

您的问题似乎是SQL Server Management Studio中的限制,而不是数据库中的限制。 是一个关于这个问题的错误报告,它声称该错误已在最新版本中得到修复(我不知道这是否属实)。 有变通办法,如建议在这里 我没有亲自尝试过。

您应该使用len()函数(或类似的东西)测试长度。 这将告诉您是否所有数据都存在。

我在数据库中使用了很长的字符串,在表,变量和存储过程之间来回传递它们,因此数据库可以处理字符串。 问题出在获取它们的界面中。

首先,Text是一种过时的SQL数据类型。 请改用varchar(max)。 我会尝试更改字段的类型和参数的类型。

这肯定不能解决问题 - 但是很有可能消除(这就是导致问题的原因),这也是一个很好的做法(不使用已弃用的功能)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM