2013-02-19 75 views
0

我正在使用SMO在Sqlserver 2008中動態創建表格。現在我想使用SMO爲現有表格添加新列,但我試圖執行代碼,最終運行時異常的「改變失敗到餐桌」。我的代碼片段作爲如何使用SMO更改表格

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#做這件事的最好方法是什麼?

+1

完整的異常或可執行的例子,將有助於 – vossad01 2013-02-19 18:50:13

+0

你可能有數據類型的問題,只要確保你有那個數據類型或嘗試其他內置的數據類型。 – 2013-02-22 16:51:28

回答

0

謝謝您的幫助..

我解決它改變了我的數據庫連接字符串初始化part.then它的正常工作..

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