2014-04-08 4 views
0

Windows Phone 8 앱에 로컬 데이터베이스를 만들었습니다. 4 개의 필드가 있습니다.wp8 로컬 데이터베이스 문제

userID - int 
Username - string 
FileName - string 
FileByte - byte[] 

FileByte 열을 업데이트하려고합니다. 나는 열을 업데이트 할 때하지만 예외를 SQL Server does not handle comparison of NText, Text, Xml, or Image data types.

을받을 것은 여기 쿼리 내 여기 DataTable

[Table] 
public class UserFilesDetailsTable : INotifyPropertyChanged, INotifyPropertyChanging 
{ 
    // Define ID: private field, public property, and database column. 
    private int _userID; 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] 
    public int userID 
    { 
     get { return _userID; } 
     set 
     { 
      if (_userID != value) 
      { 
       NotifyPropertyChanging("userID"); 
       _userID = value; 
       NotifyPropertyChanged("userID"); 
      } 
     } 
    } 

    // Define item name: private field, public property, and database column. 
    private string _Username; 
    [Column(DbType = "NVarChar(100) NOT NULL", CanBeNull = false)] 
    public string Username 
    { 
     get { return _Username; } 
     set 
     { 
      if (_Username != value) 
      { 
       NotifyPropertyChanging("Username"); 
       _Username = value; 
       NotifyPropertyChanged("Username"); 
      } 
     } 
    } 

    // Define item name: private field, public property, and database column. 
    private string _Filename; 
    [Column(DbType = "NVarChar(100) NOT NULL", CanBeNull = false)] 
    public string Filename 
    { 
     get { return _Filename; } 
     set 
     { 
      if (_Filename != value) 
      { 
       NotifyPropertyChanging("Filename"); 
       _Filename = value; 
       NotifyPropertyChanged("Filename"); 
      } 
     } 
    } 

    // Define item name: private field, public property, and database column. 
    private byte[] _Filebytes; 
    [Column(DbType = "image")] 
    public byte[] Filebytes 
    { 
     get { return _Filebytes; } 
     set 
     { 
      if (_Filebytes != value) 
      { 
       NotifyPropertyChanging("Filebytes"); 
       _Filebytes = value; 
       NotifyPropertyChanged("Filebytes"); 
      } 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    // Used to notify that a property changed 
    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    #endregion 

    #region INotifyPropertyChanging Members 

    public event PropertyChangingEventHandler PropertyChanging; 

    // Used to notify that a property is about to change 
    private void NotifyPropertyChanging(string propertyName) 
    { 
     if (PropertyChanging != null) 
     { 
      PropertyChanging(this, new PropertyChangingEventArgs(propertyName)); 
     } 
    } 

    #endregion 
} 

내 업데이트입니다

public void addFiles(int userID, string userName, string fileName, byte[] fileBytes) 
    { 
     try 
     { 
      if (!(databaseTablesDB.usersFileDetailsTable.Where(f => f.Filename == fileName).Any())) 
      { 
       databaseTablesDB.usersFileDetailsTable.InsertOnSubmit(new UserFilesDetailsTable { userID = userID, Username = userName, Filename = fileName, Filebytes = fileBytes }); 
       // Save changes to the database. 
       databaseTablesDB.SubmitChanges(); 
      } 
      else 
      { 
       var fileDetails = (from file in databaseTablesDB.usersFileDetailsTable where file.Filename == fileName && file.Username == userName select file).FirstOrDefault(); 
       if (fileDetails != null) 
       { 
        fileDetails.Filebytes = fileBytes; 
       } 
       databaseTablesDB.SubmitChanges(); 
      } 
     } 
     catch (Exception ex) 
     { 

     } 
    } 

문제 어디지고 있지 않다. 이 문제를 해결할 수있는 사람이 있습니까?

+0

이미지에 fileName 및 fileByte 필드가 모두있는 이유는 무엇입니까? fileName 필드를 유지하고 이미지를 업데이트하려면 격리 된 저장소에서 이미지를 덮어 씁니다. – Pantelis

+0

@Pantelis 답장을 보내 주셔서 감사합니다. 실제로 파일의 바이트 배열을 저장하고 싶습니다. –

답변

0

SQL Server does not handle comparison of NText, Text, Xml, or Image data types을 살펴보십시오. FileByte 열의 유형을 VARBINARY (MAX)로 변경하는 것이 좋습니다.

+0

이에 따라 데이터 유형이 변경됩니다. 그러나 데이터베이스를 만드는 동안 오류가 발생합니다. '쿼리를 구문 분석하는 중 오류가 발생했습니다. [토큰 행 번호 = 3, 토큰 라인 오프셋 = 23, 토큰 오류 = MAX]'. 'db.CreateDatabase(); '에서이 오류 받기 –

+0

데이터베이스에 바이트 열을 만들려면 어떻게해야합니까? –

+0

[Column (DbType = "image")]를 [Column (DbType = "VARBINARY (MAX)"]로 변경하십시오. –