![](/img/trans.png)
[英]String or binary data would be truncated, insert to SQL Server table
[英]Text is being truncated on Insert into SQL Server database
使用SqlCommand
将数据插入SQL Server数据库时,我们遇到了一个奇怪的问题。 如果我们尝试在konnotiz1
列中插入一个大文本,则会在43245个字符后截断该文本。 由于某种原因,我不明白真正的应用程序代码创建42909个字符。
这是列属性页面的屏幕截图:
以下代码导致问题:
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;
}
有没有人有想法,为什么文本被截断以及我们如何才能使这个工作?
首先,Text是一种过时的SQL数据类型。 请改用varchar(max)。 我会尝试更改字段的类型和参数的类型。
这肯定不能解决问题 - 但是很有可能消除(这就是导致问题的原因),这也是一个很好的做法(不使用已弃用的功能)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.