繁体   English   中英

SQL Server CE 3.5尽早切断字符串(C#)

[英]SQL Server CE 3.5 cuts off strings early (C#)

大家好,我正在编写一些使用SQL Server CE 3.5的代码,但遇到了一个非常奇怪的问题。 我在需要存储完整文件路径的表之一中有一个字符串字段。

在尝试解决此问题的过程中,我将该字段设置为最大大小为4000的nvarchar ,但它仍在剪切更长的字符串,这些字符串比限制的长度短得多。

例如:

D:\iTunes\iTunes Media\Music\Abigail Williams\In The Absence Of Light\02 Final Destiny Of The Gods.m

明显小于4000个字符,但在字符串末尾缺少p3

我正在使用表适配器通过以下查询将数据输入数据库:

INSERT INTO [Track] ([Artist_ID], [Album_ID], [FilePath], [LastUpdate]) 
VALUES (@Art, @Al, @Fp, @LU)

我知道字符串在插入时完全形成,因为我正在使用以下代码进行检查:

if(!temp.Filepath.EndsWith(".mp3"))
    MessageBox.Show("File Error");
this.trackTableAdapter1.InsertQuery(ArtID, AlID, temp.Filepath, File.GetLastWriteTime(temp.Filepath));

该消息框未显示,因此字符串在插入时必须正确结束。

提取数据的查询是:

SELECT
   *
FROM Track
WHERE Artist_ID=@Artist_ID AND Album_ID=@Album_ID

涉及的代码是:

foreach (Database.MusicDBDataSet.TrackRow TR in this.trackTableAdapter1.GetAlbumTracks(AR.Artist_ID, AlR.Album_ID).Rows)
{
   //if (!TR.FilePath.EndsWith(".mp3"))
   //MessageBox.Show("File Path Error");
   this.ArtistList[AR.Name].AlbumList[this.ArtistList[AR.Name].AlbumList.Count - 1].TrackList.Add(new Track(TR.FilePath, AlR.Name, AR.Name));
}

有人遇到过这个问题吗?

检查XSD文件。 具体来说,检查表的FilePath列并查找最大长度。

也许看看SQLServerCE参数大小限制。

具体的最大长度是多少? 大约100个字符吗? (根据您提供的输入示例进行猜测)。 100个Unicode字符也与DK Mulligan的答案匹配。 查看SQL ServerCE参数大小属性

对于长度可变的数据类型,Size属性描述了要发送到服务器的最大数据量。 例如,Size属性可用于将发送到服务器的字符串值的数据量限制为前100个字节。

对于Unicode字符串数据,Size属性是指字符数。 字符串的计数不包括终止字符。

尝试增大大小以查看这是否是截断字符串的魔数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM