![](/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.