Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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# 动态创建.mdf/.sdf数据库_C#_Sql Server_Database_Sql Server Ce_Dynamically Generated - Fatal编程技术网

C# 动态创建.mdf/.sdf数据库

C# 动态创建.mdf/.sdf数据库,c#,sql-server,database,sql-server-ce,dynamically-generated,C#,Sql Server,Database,Sql Server Ce,Dynamically Generated,如何使用“代码”创建新的.mdf/.sdf数据库 我试过这个: 它所做的只是连接字符串失败。既然我在创建一个文件之前没有与该文件的连接,那么我如何只连接到SQL Express Server来创建mdf/sdf数据库呢 我希望能够连接到服务器并创建文件,从那里可能更容易创建表等 有什么建议吗?请确保您有一个有效的连接字符串 您需要的数据库/目录必须设置为有效的数据库,通常可以是始终可用的“master”,因为您将使用master创建数据库。关于.sdf文件(SQL Server CE),您可以

如何使用“代码”创建新的.mdf/.sdf数据库

我试过这个:

它所做的只是连接字符串失败。既然我在创建一个文件之前没有与该文件的连接,那么我如何只连接到SQL Express Server来创建mdf/sdf数据库呢

我希望能够连接到服务器并创建文件,从那里可能更容易创建表等


有什么建议吗?

请确保您有一个有效的连接字符串


您需要的数据库/目录必须设置为有效的数据库,通常可以是始终可用的“master”,因为您将使用master创建数据库。

关于.sdf文件(SQL Server CE),您可以使用
SqlCeEngine
类创建新数据库,如中所述。

如果您需要以编程方式从头开始创建数据库,请首先进入SQL Server Management Studio并通过gui创建它。但是我没有单击右下角的OK按钮,而是单击顶部工具栏中的Script按钮。这将为我提供一个完整的sql脚本,用于创建我想要的数据库。然后,我可以更改脚本并动态更改所需的部分。

我想问题出在连接字符串中。它应该指向masterdb的有效实例(如您提到的文章中所述)。确保它是正确的,并且应该工作。

使用带有
InitialCatalog=master
的连接字符串。因为只有master具有创建数据库的默认访问权限

public static void CreateSqlDatabase(string filename)
{
    string databaseName = System.IO.Path.GetFileNameWithoutExtension(filename);
    using (var connection = new System.Data.SqlClient.SqlConnection(
        "Data Source=.\\sqlexpress;Initial Catalog=tempdb; Integrated Security=true;User Instance=True;"))
    {
        connection.Open();
        using (var command = connection.CreateCommand())
        {
            command.CommandText =
                String.Format("CREATE DATABASE {0} ON PRIMARY (NAME={0}, FILENAME='{1}')", databaseName, filename);
            command.ExecuteNonQuery();

            command.CommandText =
                String.Format("EXEC sp_detach_db '{0}', 'true'", databaseName);
            command.ExecuteNonQuery();
        }
    }
}
Catalog=tempdb
更改为
Catalog=master
,效果很好

样本使用:

var filename = System.IO.Path.Combine("D:\\", "testdb.mdf");
if (!System.IO.File.Exists(filename))
{
    CreateSqlDatabase(filename);
}

创建.sdf数据库

using System.Data.SqlServerCe;
using System.IO;
  string folderPath="D:\\Compact_DB"
  string connectionString;
  string fileName =folderPath+"\\School.sdf";
  string password = "12345";

  if (File.Exists(fileName))
  {
    File.Delete(fileName);
  }

  connectionString = string.Format("DataSource=\"{0}\"; Password='{1}'",    fileName, password);
  SqlCeEngine obj_ceEngine = new SqlCeEngine(connectionString);
  obj_ceEngine.CreateDatabase();

您可以选择使用SQL Server CE吗?它有这个功能。。正如在仅仅基于连接的情况下,这是有效的。但是后来,我根本无法连接到数据文件。SQL连接字符串在创建文件时起作用,但后来连接到它会给我带来许多不同的错误。如果我使用该方法在CurrentDirectory中创建一个“mdf”文件,那么以后如何使用它?现在,我会收到错误消息,指出数据库已经存在,但没有与之关联的文件。“MDF”文件中不包含数据库、表等吗?既然没有,怎么会有一个没有文件的数据库呢?这个连接字符串对我来说很有用:“数据源=(LocalDB)\\v11.0;初始目录=主目录;集成安全性=true;”我得到错误:“System.Data.SqlClient.SqlException:'建立到SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。请验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。“您能帮助我吗?”?