2011-12-16 8 views
6

Tôi đang sử dụng .net framework 4.0 và làm việc trên thiết lập triển khai Web, tôi đã tham khảo các hội đồng SMO của máy chủ sql 2008 và khi tôi gọi hàm ExecuteNonQuery trong thiết lập của mình bằng cách sử dụng các cụm từ Smo nó mang lại cho tôi lỗi này "Lắp ráp chế độ hỗn hợp được xây dựng dựa trên phiên bản 'v2.0.50727' của thời gian chạy và không thể tải trong thời gian chạy 4.0 mà không có thông tin cấu hình bổ sung." nhưng đôi khi nó hoạt động chính xác trong mã của tôi nhưng một lúc nó cho lỗi này,SMO Assemblies in .Net Framework 4.0

Tôi đã sử dụng cùng một lớp, cùng một phương pháp đôi khi nó chạy đúng và một thời gian cho lỗi này, tôi hoàn toàn phai mờ với lỗi này, Tôi không thể tìm thấy bất kỳ lý do cho điều đó và tôi cũng muốn biết là SMO hội đồng có sẵn trong .Net framework v4.0?

Trả lời

10

Từ: http://social.msdn.microsoft.com/Forums/en-US/sqlsmoanddmo/thread/533f7044-1109-4b7a-a697-2621f23017d6

Đây là vấn đề biết. Việc sử dụng SMO chống lại .Net 4.0 chưa được ký kết hoặc được công bố bởi microsoft.

Có một tùy chọn không được hỗ trợ để làm việc này (thêm video này vào app.config của bạn):

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
    </startup> 
</configuration> 
+3

Điều này không hoạt động đối với các bài kiểm tra đơn vị. – Case

+0

Giải pháp được đề xuất bởi jimasp không hoạt động. Tôi ngạc nhiên vì sao không có cách tiếp cận chính xác nào để giải quyết vấn đề này. Tìm kiếm hơn hai chục liên kết nhưng không giải quyết được. Sử dụng SqlClient Tôi có vấn đề với các câu lệnh "GO" vì vậy không thể sử dụng cách tiếp cận đó. Lưu ý: Tôi đã tạo một trình cài đặt Web Steup và từ đó tôi gọi một dự án Windows Form để thực thi mã liên quan đến kịch bản lệnh T-Sql này bằng cách sử dụng SMO. –

+0

Tôi đã thử điều này và nó làm việc cho tôi bằng cách sử dụng Windows Forms. Mối quan tâm của tôi là tôi không biết những tác dụng phụ nào sử dụngLegacyV2RuntimeActivationPolicy = "true" có thể xảy ra trong tương lai. – MikeMalter

3

Tại sao bạn sử dụng "hội đồng SMO" để gọi ExecuteNonQuery?

Tại sao không chỉ tham khảo và sử dụng ADO.NET? Xem System.Data.SqlClient.ExecuteNonQuery(...)

+11

Điều này có thể không liên quan đến OP cụ thể này, nhưng bạn cần thư viện SMO khi bạn muốn gọi [ServerConnection.ExecuteNonQuery()] (http://msdn.microsoft.com/query/dev11.query?appId= Dev11IDEF1 & l = EN-US & k = k (Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery); k (SolutionItemsProject); k (TargetFrameworkMoniker-.NETFramework, Phiên bản% 3Dv4.0); k (DevLang-csharp) & rd = true) cung cấp cho bạn khả năng chạy tập lệnh sql với từ khóa * GO * trong đó. – slugster

+0

Tôi đã thử ADO (cũng như cách tiếp cận được sử dụng trong câu trả lời dưới đây) và làm cho nó hoạt động. Tôi có thể gắn bó với nó vì tôi lo ngại về tác dụng phụ của useLegacyV2RuntimeActivationPolicy = "true". – MikeMalter

+0

Im chạy mã của tôi từ các bài kiểm tra đơn vị vì vậy trong tôi đã đi cho tùy chọn này, vì vậy không có tập lệnh SQL nào của tôi có thể có câu lệnh GO. cách giải quyết: bạn có thể quét tập lệnh SQL của mình cho GO và chia thành các tập lệnh nhỏ hơn. – Sean

0

Bản thân tôi đã xem qua vấn đề này và thêm thẻ nói trên (xem @jimasp bình luận) dường như không làm việc, tuy nhiên, tôi đã thêm nó vào app.config cho dự án rằng mã là nằm trong, tuy nhiên, nó đã được sử dụng như p nghệ thuật của một ứng dụng giao diện điều khiển. Khi tôi thêm nó vào app.config của bàn điều khiển nó chạy mà không có bất kỳ vấn đề. Tôi đã thêm nó vào app.config sai.