如何在c#中运行sql脚本

时间:2014-08-07 11:01:28

标签: c# sql

我正在寻找这个,我以为我找到了答案。这是我通过c#:

运行sql脚本的代码
using System.Data.SqlClient;
using System.IO;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;

namespace SeleniumTest2
{
    class CreateSchema
    {
        public void Schema_Create()
        {
            string sqlConnectionString = "connection string here";
            FileInfo file = new FileInfo(@"filepath to script.sql");
            string script = file.OpenText().ReadToEnd();
            SqlConnection conn = new SqlConnection(sqlConnectionString);
            Server server = new Server(new ServerConnection(conn));

            //DOESNTLIKE
            server.ConnectionContext.ExecuteNonQuery(script);


            file.OpenText().Close();
            conn.Close();


        }
    }
}

但我一直收到以下错误:

An unhandled exception of type 'Microsoft.SqlServer.Management.Common.ExecutionFailureException' occurred in Microsoft.SqlServer.ConnectionInfo.dll

Additional information: An exception occurred while executing a Transact-SQL statement or batch.

有谁能告诉我如何克服这个错误? 谢谢!

4 个答案:

答案 0 :(得分:3)

这件事发生在我身上几次。调试后,我的脚本文件本身出现了一些错误。以下对我有用:

  1. 尝试使用SQL Management Studio直接运行脚本文件。这可以查明脚本本身的错误。
  2. 将SQL脚本分解为更小的文件。出于某种原因,这对我有用。相应地将文件拆分为较小的脚本。对于我的特定数据库创建脚本,我将其分为创建表脚本,填充表脚本和添加主键和外键脚本。
  3. 我的代码:

        /// <summary>
        /// Process SQL script with "GO" statements 
        /// </summary>
        /// <param name="script"></param>
        public static void ProcessSQLScriptFile(string script)
        {
            try
            {
                SqlConnection con = new SqlConnection(Properties.Settings.Default.SQLConDefault); // your connection string 
                con.Open(); 
                Server server = new Server(new ServerConnection(con));
                server.ConnectionContext.ExecuteNonQuery(script);
                con.Close();
            }
            catch (SqlException e)
            {
                Console.WriteLine("SQL Exception: " + e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.Message);
            }
        }
    

    希望这会有所帮助。

答案 1 :(得分:1)

您可以尝试使用此方法执行sql(来自msdn):

private static void ExecuteCommand(string queryString,
    string connectionString)
{
    using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

如果您收到错误,请检查异常详细信息,检查您的连接字符串是否有效。

答案 2 :(得分:1)

我有同样的问题。为我修复的是找出实际错误:

public void Schema_Create()
{
    string sqlConnectionString = "connection string here";
    FileInfo file = new FileInfo(@"filepath to script.sql");
    string script = file.OpenText().ReadToEnd();
    SqlConnection conn = new SqlConnection(sqlConnectionString);
    Server server = new Server(new ServerConnection(conn));

    try
    {
        server.ConnectionContext.ExecuteNonQuery(script);           
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error: " + ex.InnerException.Message);
    }

    file.OpenText().Close();
    conn.Close();
}

我的问题出现在ex.InnerException.Message中,在我的情况下,我的脚本试图编写一个已经存在于表中的列(列名对于给定的表必须是唯一的)。 / p>

答案 3 :(得分:0)

将数据库路径更改为另一个驱动器 因为在c盘或Windows驱动器中,您无权创建数据库

如果更改路径,您的解决方案就会成功。