我們有一個奇怪的問題,使用SqlCommand
將數據插入到SQL Server數據庫中。如果我們嘗試將大文本插入到konnotiz1
列中,則文本將在43245個字符後截斷。出於某種原因,我不明白真正的應用程序代碼會創建42909個字符。正在截斷文本插入到SQL Server數據庫中
這裏的列屬性頁面的截圖:
下面的代碼引起該問題:
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;
}
有沒有人一個想法,爲什麼文本正在被截斷,以及我們如何可以得到這個工作?
This [article](http://www.mssqltips.com/sqlservertip/2857/silent-truncation-of-sql-server-data-inserts/)會更好地啓發你。 – chridam
你指定了參數的大小嗎?文本最多可容納2.1G字節 –
數據加載完成後,您如何測量長度? –