【问题标题】:How to alter a table using SMO如何使用 SMO 更改表
【发布时间】:2013-02-19 18:25:15
【问题描述】:

我正在使用 SMO 在 Sqlserver 2008 中动态创建表。现在我想使用 SMO 为现有表添加新列,但我正在尝试执行代码,最终获得运行时异常为 " alter fail to table"。我的代码 sn-p as

 public static bool Altertable(DynamicTable dynamicTable)
        {

            if (myDatabase.Tables.Contains(dynamicTable.Name))
            {
                Table myalterEmpTable = myDatabase.Tables[dynamicTable.Name];

                var collist = new List<Column>();

                foreach (var item in dynamicTable.Columns)
                {
                    Column col = myalterEmpTable.Columns[item.Name];
                    if (col == null)
                    {
                        Column cols = new Column(myalterEmpTable,  item.Name , DataType.UserDefinedDataType(item.Type));
                        cols.Nullable = item.IsNullable;
                        cols.Default = "";
                        collist.Add(cols);
                    }
                }
/*Here I'm getting newly added columns only*/


                foreach (var item in collist)
                {
                    myalterEmpTable.Columns.Add(item);
                }
                try
                {

                   myalterEmpTable.Alter();
                }
                catch (SmoException ex)
                {

                    throw ex;
                }
}
}

最后我遇到了异常,因为 “alter fail to table”。即使谷歌搜索也没有帮助..所以我的问题是,使用 C# 执行此操作的最佳方法是什么?

【问题讨论】:

  • 完整的异常或可执行示例会有所帮助
  • 您的数据类型可能有问题,请确保您拥有该数据类型或尝试使用其他内置数据类型。

标签: c# sql-server-2008 smo


【解决方案1】:

感谢您的帮助..

我通过更改我的数据库连接字符串初始化部分来解决它。然后它工作正常..

 string connns = ConfigurationManager.AppSettings["conn"];
                SqlConnection sqlConn = new SqlConnection(ConfigurationManager.AppSettings["conn"]);
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connns);
                string password = builder.Password;
                string userid = builder.UserID;
                ServerConnection smoConn = new ServerConnection();
                smoConn.ServerInstance = sqlConn.DataSource;
                instanceServer = new Server(smoConn);
                instanceServer.ConnectionContext.LoginSecure = false;
                instanceServer.ConnectionContext.Login = userid;
                instanceServer.ConnectionContext.Password = password;
                projectDatabase = instanceServer.Databases[sqlConn.Database];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2013-10-24
    相关资源
    最近更新 更多