2016-05-25 18 views
0

这里是我的代码,它的工作方式在数据库具有表“UserInformation”怎样才能在数据库中创建了新的表,如果该表并不存在(C#)

public bool Save() 
{ 
     using (SqlConnection connection = new SqlConnection(ConnectionString) 
     { 
      connection.Open(); 

      using (SqlTransaction transaction = connection.BeginTransaction()) 
      { 
       try 
       { 
        using (var adapter = new UserInformationTableAdapter()) 
        { 
         adapter.Connection = connection; 
         adapter.Transaction = transaction; 

         var table = new HelloDataSet.UserInformationDataTable(); 
         HelloDataSet.UserInformationRow row = table.NewUserInformationRow(); 
         row.UserName = userName; 
         row.Password = password; 
         row.Brithday = brithday; 
         table.Rows.Add(row); 
         adapter.Update(table); 

         transaction.Commit(); 
         return true; 
        } 
       } 
       catch (Exception e) 
       { 
        transaction.Rollback(); 
        return false; 
       } 
       finally 
       { 
        connection.Close(); 
       } 
      } 
} 

然而,当没有表在数据库中,它不会在数据库中创建“UserInformation”表,它会跳转到“adapter.Update(table);”行中的“catch”异常。

所以我的问题是如何在数据库中创建一个新的表,如果它没有“UserInformation”表。另外,如果数据库已经有表“UserInformation”,我可以在该表中添加一个新的“Position”列吗?

+0

我不确定你在问什么。你是否试图将行插入可能不存在的表中?如果表不存在,是否希望数据库服务器自动创建具有特定字段结构的表? (为什么表不在那里?)我建议使用CREATE TABLE命令或使用交互式工具(如SQL Server Management Studio)创建表。另外,你没有提到你正在使用什么样的数据库。相应地标记这个问题将提高答案的相关性。 –

+0

我希望数据库服务器自动创建表。原因是,我将允许用户选择数据库,因此如果用户切换到新数据库,我的应用程序应该能够在新数据库中创建该表。 –

+1

您将不得不创建您的程序执行的脚本或一系列SQL语句。存储过程或触发器已关闭,因为如果数据库是新的,它将不会有表或任何代码来创建表。我会检查一个表的存在,然后询问用户“初始化表(应用程序名称)?”如果用户说是,请运行您的脚本或“CREATE TABLE”SQL语句集。 –

回答

0

最后,我得到了答案,并希望分享它。首先,我必须说我错误地提出了我的问题。我真正想要的是我有一个应用程序,这个应用程序连接到一个数据库。但是,我允许用户切换数据库。因此,当用户切换到新数据库时,我希望应用程序将整个数据库结构(不包括数据)从旧数据库复制到新数据库。另外,如果我在应用程序代码中对数据库进行了一些更改(可以为一个或多个表添加新列,或者添加另一个新表),我希望每个其他数据库都知道更新并通过运行进行相同的更改我的新应用程序代码。


所以,这里是我的解决方案。我写了一个名为“SchemaManager”的框架。它将在每个数据库中创建一个附加表,该表包含数据库的版本。因此,每次运行我的应用程序时,“SchemaManager”都会检查我的硬代码数据库版本号与数据库版本号,如果我的硬代码数据库版本号大于数据库版本号,“SchemaManager”将检查更改并为我做更新。


我知道我的解决方案不是最好的,但这就是我所做的。如果有人有其他解决方案,请与我和其他人分享。

相关问题