2011-05-14 30 views
2

嗨大家好,我正在編寫一些使用SQL Server CE 3.5的代碼,並且我遇到了一個非常奇怪的問題。我在其中一個表中需要存儲完整文件路徑的字符串字段。SQL Server CE 3.5早期切斷字符串(C#)

在試圖解決這個問題,我有一個字段設置爲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) 

我知道,因爲我使用下面的代碼來檢查字符串完全形成於插入:

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

消息框未顯示,所以字符串必須在插入時正確結束。

提取數據的查詢是:

SELECT 
    * 
FROM Track 
WHERE [email protected]_ID AND [email protected]_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)); 
} 

有沒有人以前碰到這個問題?

+1

你能否提供存儲/讀取表的代碼? – IAmTimCorey 2011-05-14 23:39:54

+1

它總是2個字符?你可以發佈你使用的插入/選擇代碼嗎? – 2011-05-14 23:43:14

+0

發佈了,不,有時它會得到「.mp」,有時會使它穿過整個字符串,有時它甚至不會使它成爲「。「增加和減小最大字段大小似乎完全沒有影響 – pquest 2011-05-14 23:50:59

回答

0

檢查XSD文件。具體來說,查看錶格的FilePath列並查找最大長度。

+0

最大長度設置爲4000,就像在數據庫中一樣 – pquest 2011-05-15 00:01:46

0

什麼是具體的最大長度?它大約有100個字符嗎? (根據您提供的輸入示例猜測)。 這個100個unicode字符也與D.K.相匹配。穆利根的回答。查看SQL ServerCE參數Size Property

對於可變長度數據類型,Size屬性描述了發送到服務器的最大數據量。例如,Size屬性可用於將發送到服務器的字符串值的數據量限制爲前100個字節。

對於Unicode字符串數據,Size屬性指的是字符數。字符串計數不包括終止字符。

嘗試顛倒大小以查看這是否是截斷字符串的幻數。