[英]How to create ALTER scripts instead of CREATE scripts using SMO (Server Management Object)
[英]How to alter a table using SMO
我正在使用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;
}
}
}
最终,我因为“表无法更改”而出现异常。即使用谷歌搜索也没有帮助..所以我的问题是,使用C#做到这一点的最佳方法是什么?
谢谢您的帮助..
我解决了它,因为更改了数据库连接字符串初始化部分。然后它工作正常。
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.