简体   繁体   English

如何使用SMO更改表

[英]How to alter a table using SMO

I'm using SMO to create table dynamically in Sqlserver 2008.now I would like to add new columns for existing table using SMO, but I'm trying to execute the code the finally getting run time exception as "alter fail to table" .My code snippet as 我正在使用SMO在Sqlserver 2008中动态创建表。现在,我想使用SMO为现有表添加新列,但是我正在尝试执行代码,最终导致运行时异常为“ alter fail to table” 。我的代码段为

 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;
                }
}
}

Finally I'm getting exception as "alter fail to table" .even googled also no help ..So my question is, what is the best way to do this using C#? 最终,我因为“表无法更改”而出现异常。即使用谷歌搜索也没有帮助..所以我的问题是,使用C#做到这一点的最佳方法是什么?

Thank you for your help.. 谢谢您的帮助..

I solved it as changed my database connection string initialization part.then it's working fine.. 我解决了它,因为更改了数据库连接字符串初始化部分。然后它工作正常。

 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];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM