嘿所有人,我正在编写一些使用SQL Server CE 3.5的代码,我遇到了一个非常奇怪的问题。我在其中一个表中有一个字符串字段,需要存储一个完整的文件路径。
在尝试修复此问题的过程中,我将该字段设置为nvarchar
,最大大小为4000,但它仍然会缩短比限制条件短得多的字符串
例如:
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)
我知道字符串是完全在insert上形成的,因为我使用以下代码来检查:
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));
}
以前有没有人遇到过这个问题?
答案 0 :(得分:0)
检查XSD文件。具体来说,请检查表格的FilePath
列并查找最大长度。
答案 1 :(得分:0)
或许请查看SQLServerCE Parameter尺寸限制。
答案 2 :(得分:0)
具体的最大长度是多少?是100个字符吗? (根据您提供的输入示例进行猜测)。 100个unicode字符也与D.K.匹配。穆利根的回答。查看SQL ServerCE参数Size Property
对于可变长度数据类型,Size属性描述了要发送到服务器的最大数据量。例如,Size属性可用于将发送到服务器的数据量限制为前100个字节的字符串值。
对于Unicode字符串数据,Size属性是指字符数。字符串的计数不包括终止字符。
尝试碰撞大小以查看这是否是截断字符串的幻数。