2012-12-23 36 views
1

这是我的课:WP7 - 访问数据库文件是不允许

[Table] 
public class Question 
{ 
    [Column] 
    public bool Sort { get; set; } 
    [Column(IsPrimaryKey = true)] 
    public int QuestionID { get; set; } 
    [Column] 
    public int Level { get; set; } 
    [Column] 
    public string Description { get; set; } 
    [Column] 
    public string Answer1 { get; set; } 
    [Column] 
    public string Answer2 { get; set; } 
    [Column] 
    public string Answer3 { get; set; } 
    [Column] 
    public string Answer4 { get; set; } 
    [Column] 
    public string RightAnswer { get; set; } 
    [Column] 
    public bool Show { get; set; } 
} 

public class QuestionContext : DataContext 
{ 
    public QuestionContext(string connectionString) 
     : base(connectionString) 
    { 
    } 
    public Table<Question> Questions 
    { 
     get 
     { 
      return this.GetTable<Question>(); 
     } 
    } 
} 

我尝试连接到现有数据库:

private const string ConnectionString = @"appdata:App_Data\QuestionDb.sdf"; 

public GamePage() 
{ 
    InitializeComponent(); 

    using (QuestionContext context = new QuestionContext(ConnectionString)) 
    { 

     if (!context.DatabaseExists()) 
     { 
      // create database if it does not exist 
      context.CreateDatabase(); 
     } 
     else 
     { 
      var questions = from o in context.Questions where o.Level == 1 && o.Show == false select o; 
      var question = questions.FirstOrDefault(); 
     } 
    } 
} 

我得到的错误与“访问数据库文件不被允许“。我认为问题出在我的连接字符串中。它出什么问题了?我如何才能访问文件夹App_Data中的SQLCE数据库?

+0

我会尝试将数据库文件移动到另一个位置,例如。在Windows 7上,如果您尝试访问位于程序文件内的数据库文件(它只是为管理员用户保护),它会给出相同的错误 – erem

+0

我看到了这一点,但我认为这不会是我的问题。我将我的数据库添加到了我的解决方案中,所以现在我已将它放在我有项目的位置,并且它不在Program Files或具有类似限制的其他位置。 –

回答

0

您必须编写连接字符串是这样的:

MyDataContext db = new MyDataContext("Data Source = 'appdata:/mydb.sdf'; File Mode = read only;"); 

数据库文件将是只读...

1

在你的app.config添加以下

<connectionStrings> 
    <add name="DataContext" 
     connectionString="Data source=DataDirectory|Database.sdf;" 
     providerName="System.Data.SqlServerCe.4.0"/> 
</connectionStrings> 

然后得到与ConfigurationManager中帮助的ConnectionString。也许你需要添加一个对System.Configuration的引用。

private const string ConnectionString = ConfigurationManager.ConnectionStrings["DataContext"].ConnectionString 

您可以了解更多关于DataDirectory目录中的ConnectionString这里:http://msdn.microsoft.com/en-us/library/cc716756(v=vs.100).aspx

+0

ConfigurationManager是否可用于Windows Phone?我添加了system.configuration,但仍然存在ConfigurationManager。 –

相关问题