我正在使用以下查询来插入一些大型文本数据:
internal static string InsertStorageItem =
"insert into Storage(FolderName, MessageId, MessageDate, StorageData) values ('{0}', '{1}', '{2}', @StorageData)";
我用来执行此查询的代码如下:
string content = "very very large data";
string query = string.Format(InsertStorageItem, "Inbox", "AXOGTRR1445/DSDS587444WEE", "4/19/2010 11:11:03 AM");
var command = new SqlCeCommand(query, _sqlConnection);
var paramData = command.Parameters.Add("@StorageData", System.Data.SqlDbType.NText);
paramData.Value = content;
paramData.SourceColumn = "StorageData";
command.ExecuteNonQuery();
但是在最后一行我得到以下错误:
System.Data.SqlServerCe.SqlCeException was unhandled by user code Message=The data was truncated while converting from one data type to another. [ Name of function(if known) = ] Source=SQL Server Compact ADO.NET Data Provider HResult=-2147467259 NativeError=25920 StackTrace: at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr) at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr& pCursor, Boolean& isBaseTableCursor) at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options) at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery() at Chithi.Client.Exchange.ExchangeClient.SaveItem(Item item, Folder parentFolder) at Chithi.Client.Exchange.ExchangeClient.DownloadNewMails(Folder folder) at Chithi.Client.Exchange.ExchangeClient.SynchronizeParentChildFolder(WellKnownFolder wellknownFolder, Folder parentFolder) at Chithi.Client.Exchange.ExchangeClient.SynchronizeFolders() at Chithi.Client.Exchange.ExchangeClient.WorkerThreadDoWork(Object sender, DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e) at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument) InnerException:
现在我的问题是我应该如何将这么大的数据插入sqlce db?
此致
Anindya Chatterjee
答案 0 :(得分:3)
您是否阅读过ntext数据类型的文档?
带有的可变长度Unicode数据 最大长度为230 - 1 (1,073,741,823)个字符。存储 大小,以字节为单位,是两倍 输入的字符数
你的非常大的内容是否比最大内容更大?如果是这样,你运气不好 - 你需要一种可以存储比ntext更多数据的数据类型。我的建议:varbinary(MAX)或Image。
答案 1 :(得分:2)
也许您应该考虑为什么必须将如此大量的文本放入数据库中。也许对外部文件的引用(链接 - 路径)将是更好的解决方案。
答案 2 :(得分:1)
您列出的代码应该有效。你先检查过你的基地吗?
我认为它可能是抛出异常的其他列之一。按可能性排序:
因此,首先使用StorageData = NULL或小文本对其进行测试。
答案 3 :(得分:0)
我建议在创建参数时指定字段的长度:
var paramData = command.Parameters.Add("@StorageData", System.Data.SqlDbType.NText, /* column length here */);
paramData.Value = content;
答案 4 :(得分:0)
我是否可以将StorageData
的类型从ntext
更改为image
,并将您的内容写为二进制。我想这会对你有帮助。
干杯 AK