2012-02-18 50 views
0

我有一个简单的C#函数应该创建一个名为Database2.mdf的新的Microsoft SQL数据库。简单的函数来创建SQL数据库失败:什么是错的?

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

出现的错误是:

{"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"}

我的代码:

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; 
    } 
+0

无法打开连接并与查询无关。你可以将'myConn.Open()'移到命令定义的上面,它仍然会发生。 – Fosco 2012-02-18 00:09:45

+0

提供程序:命名管道提供程序是否尝试连接到本地服务器? – 2012-02-18 00:09:50

+0

您是否检查过您的SQL Server Express实例是否在此计算机上运行? – rcdmk 2012-02-18 00:10:20

回答

1

你的问题不是该命令失败,该数据库没有得到建立。 您没有将连接到db以首先运行该命令。连接字符串有可能是错误的,可能是服务器名称(或服务器本身)。 。

根据你的创建数据库脚本的服务器的名称似乎是\ SQLEXPRESS相应地调整你的连接字符串:

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

检查here for extra details,但这些都是检查的事项:

  • 你的服务器实例是默认的吗?如果没有,则它被命名并且连接字符串中的服务器名称应该如下所示:.\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配置为允许远程连接。
  • (provider:命名管道提供程序,error:40 - 无法打开到SQL Server的连接)“}

不要以为命令没有工作的错误明确地说,这是一个。连接问题,而不是SQL语法或其他一些这样的问题。

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级别)驱动器...]

相关问题