C# windows phone中的数据库、表和列
我在WindowsPhone7.1中有一个应用程序,其本地数据库sdf位于独立文件中。 现在,在我的当前版本中,我有以下表格:C# windows phone中的数据库、表和列,c#,database,windows-phone-7,multiple-columns,C#,Database,Windows Phone 7,Multiple Columns,我在WindowsPhone7.1中有一个应用程序,其本地数据库sdf位于独立文件中。 现在,在我的当前版本中,我有以下表格: [Table] public class Employee { [Column(IsPrimaryKey = true)] public string EmployeeFile { get; set; } [Column(CanBeNull = false)] public string E
[Table]
public class Employee
{
[Column(IsPrimaryKey = true)]
public string EmployeeFile
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeName
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeByte
{
get;
set;
}
}
在下一个版本的应用程序中,我想再添加两列,如下所示:
[Table]
public class Employee
{
[Column(IsPrimaryKey = true)]
public string EmployeeFile
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeName
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeType
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeExtn
{
get;
set;
}
[Column(CanBeNull = false)]
public string EmployeeByte
{
get;
set;
}
}
然后,如果我更改了表的代码,则在进行查询时应用程序会崩溃。
如果数据库中不存在这两个列,如何添加这两个列
我尝试了以下代码来更新我的数据库:
using (Connection Empdb = new Connection(constant.strConnectionString))
{
if (Empdb.DatabaseExists())
{
DatabaseSchemaUpdater dbUpdater = Empdb.CreateDatabaseSchemaUpdater();
// Add the column
try { dbUpdater.AddColumn<string>("EmployeeFile"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeName"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeType"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeExtn"); dbUpdater.Execute(); }
catch { /* Nothing */ }
try { dbUpdater.AddColumn<string>("EmployeeByte"); dbUpdater.Execute(); }
catch { /* Nothing */ }
}
}
使用(Connection Empdb=新连接(constant.strConnectionString))
{
if(Empdb.DatabaseExists())
{
DatabaseSchemaUpdater dbUpdater=Empdb.CreateDatabaseSchemaUpdater();
//添加列
请尝试{dbUpdater.AddColumn(“EmployeeFile”);dbUpdater.Execute();}
捕获{/*无*/}
请尝试{dbUpdater.AddColumn(“EmployeeName”);dbUpdater.Execute();}
捕获{/*无*/}
请尝试{dbUpdater.AddColumn(“EmployeeType”);dbUpdater.Execute();}
捕获{/*无*/}
请尝试{dbUpdater.AddColumn(“EmployeeExtn”);dbUpdater.Execute();}
捕获{/*无*/}
请尝试{dbUpdater.AddColumn(“EmployeeByte”);dbUpdater.Execute();}
捕获{/*无*/}
}
}
每一列都使用此代码进入catch,此代码正确吗?该列将添加到哪个表中?
列将添加到哪个表中?您应该使用下面的列类型,而不是需要告诉表名的列类型 列类型将取自表类
try { dbUpdater.AddColumn<Employee>("EmployeeFile"); dbUpdater.Execute(); }
catch { /* Nothing */ }
试试{dbUpdater.AddColumn(“EmployeeFile”);dbUpdater.Execute();}
捕获{/*无*/}
这可能与您的问题无关,因为来自Aanabidden的答案看起来像是bug,但我发现代码中还有另一个问题。AddColumn()操作缓存在数据库更新程序对象中,并在Execute()调用时执行。但如果第一列存在,则每次调用Execute()都会再次尝试添加它;第一次Execute()调用失败不会导致从数据库更新程序缓存中删除该操作
一旦其中一个方法失败,就没有理由调用任何其他AddColumn()或Execute()方法,因为缓存的操作将继续抛出异常
副作用是,如果第一列已经存在,则不会添加其他任何列
我看到的问题的解决方案,与您在AddColumn类型参数中错误使用“string”类型而不是表名无关,是为每个AddColumn/Execute对创建一个单独的数据库更新程序对象。然后其中一个失败不会导致其余的失败
同样,这并不是你的代码出了什么问题,但如果有什么原因导致某些列存在而其他列不存在,这就是一个bug(比如在代码中编写一些其他bug,然后像我一样将应用程序分发给客户).当应用程序崩溃时,它会因为异常而崩溃。您可以捕获该异常,它会告诉您错误所在。没有这些信息,您只是在猜测。停止猜测。使用独立的工具资源管理器,检查数据库是否按照您的要求生成。您可以使用sdf资源管理器检查数据库我的代码没有错误。但是您没有正确复制代码。
内部应该有表
名称而不是列的类型