2014-04-07 30 views
0

我有這個類,我試圖從執行我的腳本:執行一個錯誤從C#結果的SQL腳本

using System; 
using System.Data.SqlClient; 
using System.IO; 
using Microsoft.SqlServer.Management.Common; 
using Microsoft.SqlServer.Management.Smo; 
using SSS.ServicesConfig.MiscClasses; 

namespace SSS.ServicesConfig.sqlchanges 
{ 
    internal static class ExecuteScript 
    { 
    public static Status Execute(SqlConnection con, string scripttoexecute) 
    { 
     var status = new Status(); 
     try 
     { 
     var file = new FileInfo(scripttoexecute); 
     var script = file.OpenText().ReadToEnd(); 
     var server = new Server(new ServerConnection(con)); 
     server.ConnectionContext.ExecuteNonQuery(script); 
     file.OpenText().Close(); 
     status.IsSuccess = true; 
     status.Message = "Success!"; 
     return status; 
     } 
     catch (Exception ex) 
     { 
     status.Message = ex.Message; 
     status.IsSuccess = false; 
     return status; 
     } 
    } 
    } 
} 

它正在執行一個SQL腳本,通過SSMS創建的,是我在項目設置爲每次複製。

我得到這個消息:

混合模式組件對版本內置的 運行時的「V2.0.50727,且不能在4.0運行時無需額外 配置信息被加載。

我檢查我的項目中的每一個,他們使用的是.NET Framework 4中,我得到在這條線以下消息:

server.ConnectionContext.ExecuteNonQuery(script); 

難道說我的.sql文件不是淨4.0文件?我不確定我是否明白這是指的是運行2.0。

任何想法?

編輯#1

這是我的.sql文件的開頭是否有幫助。我可以張貼整個事情,但它是真實的基礎,只是創建表屈指可數:

USE [master] 
GO 
/****** Object: Database [SuburbanPps] Script Date: 4/7/2014 2:00:12 PM ******/ 
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'SuburbanPps') 
BEGIN 
CREATE DATABASE [SuburbanPps] ON PRIMARY 
(NAME = N'SuburbanPps', SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N'SuburbanPps_log', SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 
END 

GO 
ALTER DATABASE [SuburbanPps] SET COMPATIBILITY_LEVEL = 100 
GO 
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) 
begin 
EXEC [SuburbanPps].[dbo].[sp_fulltext_database] @action = 'enable' 
end 
GO 
ALTER DATABASE [SuburbanPps] SET ANSI_NULL_DEFAULT OFF 
GO 
ALTER DATABASE [SuburbanPps] SET ANSI_NULLS OFF 
GO 
ALTER DATABASE [SuburbanPps] SET ANSI_PADDING OFF 
GO 
ALTER DATABASE [SuburbanPps] SET ANSI_WARNINGS OFF 
GO 
ALTER DATABASE [SuburbanPps] SET ARITHABORT OFF 
GO 

編輯#2

我相信這是Microsoft.SqlServer.ConnectionInfo因爲它的版本是V2.0.50727,它匹配以上版本。

編輯#3

好吧,我在這混亂。我本來以爲,當我加入Microsoft.SqlServer.ConnectionInfo,我是加入.NET 4.0版本,從下面的圖片所示:

enter image description here

那是不正確的?如果我不需要安裝我的應用程序,我寧願不需要兩個不同的框架。或者......我真的很困惑發生了什麼事情?

這不只是這一問題的工作,而不是圍繞一個真正的解決:

<startup useLegacyV2RuntimeActivationPolicy="true"> 
+0

它似乎並不關係到你的sql腳本的。 – Crono

+0

我不認爲這會......我只是不明白它指的是什麼。 – ErocM

+0

這看起來像你的一個組件沒有運行與其他組件相同的框架,也許你的sql服務器驅動程序不是最新的。 – paqogomez

回答

2

混合模式大會?這是一個ASP.Net應用程序嗎?

如果是這樣,已經多次回答和解決。對Web.config的一個小改動應該可以工作。

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
</startup> 

Ref

+0

我已經編輯了我的文章並添加了編輯#3來回應這個問題。這是一個winforms應用程序。 – ErocM

+0

我以前在控制檯應用程序中遇到過這個問題,這與我在那裏修復的問題是一樣的。 –

+0

這是很好的知道,我的大部分工作是在衆所周知的「雲」,所以它的所有ASP在房子的.NET端。整體解決方案是將所有引用的庫升至v4.0。 Microsoft.SqlServer.ConnectionInfo 如果您遇到問題,您可能需要將此資源本地複製到項目中,以識別4.0版本而不是2.0版本。過去,Visual Studio處理相同資源的不同版本時,我有過不可思議的問題。 – Perkentha