Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#执行sql脚本会导致错误_C#_Sql_Winforms_Executenonquery - Fatal编程技术网

从C#执行sql脚本会导致错误

从C#执行sql脚本会导致错误,c#,sql,winforms,executenonquery,C#,Sql,Winforms,Executenonquery,我尝试从以下类执行脚本: 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 { interna

我尝试从以下类执行脚本:

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”构建的 运行时,如果没有额外的 配置信息

我检查了我的每一个项目,他们正在使用.NETFramework4。我在这条线上得到这条信息:

server.ConnectionContext.ExecuteNonQuery(script);
是不是说我的.sql文件不是.NET4.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">

混合模式组装?这是ASP.Net应用程序吗

如果是这样的话,这个问题已经回答并解决了好几次。对Web.config进行一个小的更改应该可以工作

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


它似乎与您的sql脚本毫无关系。我认为它不会。。。我只是不明白它指的是什么。看起来您的一个组件与其他组件运行的框架不同,可能您的sql server驱动程序不是最新的。您是否尝试过此方法:您的解决方案中可能有多个项目,并且它们针对的是不同的.NET运行时版本。或者你指的是一个编译过的程序集。我编辑了我的帖子,并添加了Edit#3作为回应。这是一个winforms应用程序。我以前在控制台应用程序中遇到过这个问题,这与我在那里解决的问题是一样的。很高兴知道,我的大部分工作都在众所周知的“云”中,所以所有的ASP都在房子的.NET端。总体解决方案是将所有引用的库升级到v4.0。Microsoft.SqlServer.ConnectionInfo如果您在识别4.0版本而不是2.0版本时遇到问题,可能需要将此资源复制到项目的本地。过去,我在Visual Studio处理同一资源的不同版本时遇到了一些不稳定的问题。
总体解决方案是将所有引用的库升级到v4.0。
这正是我想要了解的。我将尝试将其复制到项目中,看看结果如何。