创建SQL数据库失败的简单功能:什么错了?

时间:2012-02-18 00:04:46

标签: c# sql

我有一个简单的C#函数,它应该创建一个名为Database2.mdf的新Microsoft SQL数据库。

我的问题:该功能无法创建数据库&我不确定为什么?我从MSDN复制了代码,演示了如何创建数据库,但我不确定我的SqlConnection字符串或我的SQLCommand字符串是否正确?

发生的错误是:

  

{“发生与网络相关或特定于实例的错误   建立与SQL Server的连接。找不到服务器或   无法访问。验证实例名称是否正确   SQL Server配置为允许远程连接。 (提供者:命名   管道提供程序,错误:40 - 无法打开与SQL的连接   服务器)“}

我的代码:

    public static string DEF_DB_NAME = "Database2";
    private bool create()
    {
        Console.WriteLine("populating data");
        bool res = false;
        SqlConnection myConn = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master");
        string str = "CREATE DATABASE "+DEF_DB_NAME+" ON PRIMARY " +
            "(NAME = .\\SQLEXPRESS, " +
            "FILENAME = " + DEF_DB_NAME + ".mdf', " +
            "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
            "LOG ON (NAME = " + DEF_DB_NAME + "_Log, " +
            "FILENAME = " + DEF_DB_NAME + "Log.ldf', " +
            "SIZE = 1MB, " +
            "MAXSIZE = 5MB, " +
            "FILEGROWTH = 10%)";

        SqlCommand myCommand = new SqlCommand(str, myConn);
        myConn.Open();  // ERROR OCCURS HERE
        myCommand.ExecuteNonQuery();
        insertDefData(myConn);
        myConn.Close();
        res = true;

        return res;
    }

2 个答案:

答案 0 :(得分:1)

您的问题不是命令失败而且没有创建数据库。 您没有将连接到数据库以便首先运行该命令。您的连接字符串可能有问题,可能还有服务器名称(或服务器本身)。

根据您的create db脚本,服务器的名称似乎是。\ SQLEXPRESS相应地调整您的连接字符串:

SqlConnection myConn = new SqlConnection(@"Server=.\SQLEXPRESS ;Integrated security=SSPI;database=master");

检查here for extra details,但这些是要检查的内容:

  • 您的服务器实例是默认的吗?如果没有,那么它被命名,conn字符串中的服务器名称应如下所示:.\SQLEXPRESS
  • 您的服务器是否配置为允许远程连接? (阅读错误信息)
  • 要尝试的可选连接字符串:
    • Server=.;Database=master;Trusted_Connection=True;
    • Server=(local);Database=master;Trusted_Connection=True;
    • Server=127.0.0.1;Database=master;Trusted_Connection=True;
  • 和...是您的SQL Server正在运行吗?

同时解析错误:

  • 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。
  • 找不到服务器或无法访问服务器。
  • 验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。
  • (提供商:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)“}

不要认为命令不起作用。该错误明确表示这是一个连接问题,而不是SQL语法或其他一些此类问题。

答案 1 :(得分:1)

您的CREATE DATABASE声明应为:

        string str = "CREATE DATABASE " + DEF_DB_NAME + " ON PRIMARY " +
            "(NAME = N'" + DEF_DB_NAME + "_Dat', " +
            "FILENAME = 'C:\\somepath\\" + DEF_DB_NAME + ".mdf', " +
            "SIZE = 10MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
            "LOG ON (NAME = N'" + DEF_DB_NAME + "_Log', " +
            "FILENAME = 'C:\\somepath\\" + DEF_DB_NAME + "Log.ldf', " +
            "SIZE = 1MB, " +
            "MAXSIZE = 5MB, " +
            "FILEGROWTH = 10%)";

经过测试,100%工作。 (你在几个地方缺少引号)

您可能需要根据模型数据库的大小增加数据文件的初始大小。 (我必须在我的电脑上增加指定尺寸> 3MB)

数据库文件的默认路径为C:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\ [如果这是一个生产数据库,则日志和数据文件应位于不同的(和适当的RAID级别)驱动器上...]