如果表不存在,如何在数据库中创建新表(c#)

时间:2016-05-25 21:48:02

标签: c# sql-server database sqldataadapter

这是我的代码,它适用于数据库有表" UserInformation"

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"在数据库中的表中,它将跳转到" catch"行中的异常" adapter.Update(table);"

所以我的问题是如果没有" UserInformation"我怎么能在数据库中创建一个新表?桌子里面。另外,如果数据库已经有表" UserInformation"我可以添加一个新列" Position"在那张桌子上?

1 个答案:

答案 0 :(得分:0)

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

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

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