【发布时间】:2014-05-20 05:40:00
【问题描述】:
我有这个类,我正在尝试从以下位置执行我的脚本:
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;
}
}
}
}
它正在执行一个由 SSMS 创建的 sql 脚本,我在项目中设置为每次都复制它。
我收到这条消息:
混合模式程序集是针对版本“v2.0.50727”构建的 运行时并且不能在没有额外的 4.0 运行时加载 配置信息。
我检查了我的每一个项目,它们都在使用 .Net Framework 4。我在这一行收到这条消息:
server.ConnectionContext.ExecuteNonQuery(script);
是不是说我的 .sql 文件不是 .Net 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 版本,如下图所示:
这不正确吗?如果不需要,我宁愿在安装我的应用程序时不需要两个不同的框架。或者……我真的对发生的事情感到困惑吗?
这不只是一种解决方法,而不是真正解决问题吗:
<startup useLegacyV2RuntimeActivationPolicy="true">
【问题讨论】:
-
好像和你的sql脚本一点关系都没有。
-
我不认为它会......我只是不明白它指的是什么。
-
这看起来像您的一个组件运行的框架与其他组件不同,也许您的 sql server 驱动程序不是最新的。
-
您的解决方案中可能有多个项目,并且它们针对不同的 .NET 运行时版本。那,或者你指的是一个已编译的程序集。
标签: c# sql winforms executenonquery