如何将大文本数据(~20mb)放入sql cs 3.5数据库?

时间:2010-04-19 07:50:12

标签: c# .net database sql-server-ce

我正在使用以下查询来插入一些大型文本数据:

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

http://abstractclass.org

5 个答案:

答案 0 :(得分:3)

您是否阅读过ntext数据类型的文档?

  

带有的可变长度Unicode数据   最大长度为230 - 1   (1,073,741,823)个字符。存储   大小,以字节为单位,是两倍   输入的字符数

你的非常大的内容是否比最大内容更大?如果是这样,你运气不好 - 你需要一种可以存储比ntext更多数据的数据类型。我的建议:varbinary(MAX)或Image。

答案 1 :(得分:2)

也许您应该考虑为什么必须将如此大量的文本放入数据库中。也许对外部文件的引用(链接 - 路径)将是更好的解决方案。

答案 2 :(得分:1)

您列出的代码应该有效。你先检查过你的基地吗?

我认为它可能是抛出异常的其他列之一。按可能性排序:

  1. MessageDate
  2. 的MessageId
  3. 文件夹名称
  4. 因此,首先使用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