【发布时间】:2014-03-03 15:14:57
【问题描述】:
我们在使用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;
}
有没有人知道为什么文本被截断以及我们如何让它工作?
【问题讨论】:
-
这个article会更好地启发你。
-
您是否在参数上指定了尺寸?文本最多可容纳 2.1G 字节
-
数据加载后如何测量长度?
-
param = cmd.Parameters.Add("@konNotiz1", SqlDbType.VarChar, -1);
-
从文件中读入多长的数据?在你责备之前,你实际上是在将所有数据都发送到 SQL Server 中吗……
标签: c# sql sql-server foxpro sqlcommand