Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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 server生成的脚本填充数据库_C#_Sql Server_Asp.net Mvc 4_Entity Framework 4 - Fatal编程技术网

C# 从sql server生成的脚本填充数据库

C# 从sql server生成的脚本填充数据库,c#,sql-server,asp.net-mvc-4,entity-framework-4,C#,Sql Server,Asp.net Mvc 4,Entity Framework 4,所以我正在开发一个web应用程序,每个用户都有自己的数据库。我想要的是在用户注册时自动创建特定于用户的数据库 我的想法是使用自定义名称创建一个新的空数据库,然后运行一个预生成的sql脚本来生成该数据库的表和默认值 编辑 我想我以前不太清楚 我按如下方式创建数据库: using (var conn = new SqlConnection("data source=MySource; uid=MyUser; pwd=MyPassword;")) { using (var cmd =

所以我正在开发一个web应用程序,每个用户都有自己的数据库。我想要的是在用户注册时自动创建特定于用户的数据库

我的想法是使用自定义名称创建一个新的空数据库,然后运行一个预生成的sql脚本来生成该数据库的表和默认值

编辑 我想我以前不太清楚

我按如下方式创建数据库:

using (var conn = new SqlConnection("data source=MySource; uid=MyUser; pwd=MyPassword;"))
   {
      using (var cmd = new SqlCommand())
      {
         conn.Open();
         cmd.Connection = conn;
         cmd.CommandText = "Create Database MYNewDB;";
         cmd.ExecuteNonQuery();
      }
   }
有没有办法(在此之后)执行保存在.sql文件中的脚本来创建此新数据库的表和值?

在上找到了解决方案

使用(var conn=new SqlConnection(“数据源=MySource;初始目录=MYNewDB;持久安全信息=True;用户id=MyUser;密码=MyPassword;multipleactiveresultsets=True;”)
{
string script=File.ReadAllText(@“C:\Somewhere\…\script.sql”);
//运行时拆分脚本命令
IEnumerable commandStrings=Regex.Split(脚本@“^\s*GO\s*$”,RegexOptions.Multiline | RegexOptions.IgnoreCase);
conn.Open();
foreach(commandStrings中的字符串commandString)
{
if(commandString.Trim()!=“”)
{
使用(var命令=新的SqlCommand(commandString,conn))
{
command.ExecuteNonQuery();
}
}
}
康涅狄格州关闭();
}

您预计有多少用户?你考虑过更新脚本吗?对我来说,这听起来像是一个非常痛苦的架构。在每个表中添加一列UserID,并确保每个查询都有额外的检查,会简单得多。请说明您发现哪些方法不起作用(即链接+一句话描述将是完美的),或者根本不添加此类文本。例如,“尝试过,但XXXX阻止我这么做”)@SeanLange这是我公司开发的软件的网络版本。如果只有20%的客户坚持,我们将讨论350到450个客户,他们可以有超过1个不同的用户,在表中,他们将包括自己的客户。我认为最好为每个客户端保留一个数据库。因此,当你更新软件时,你必须更新350-450个数据库。对我来说,这听起来并不有趣。要回答您的问题,您需要创建一个脚本来创建数据库xxx等
using (var conn = new SqlConnection("data source=MySource; initial catalog=MYNewDB;persist security info=True;user id=MyUser;password=MyPassword;multipleactiveresultsets=True; "))
{
   string script = File.ReadAllText(@"C:\Somewhere\...\script.sql");

   // split script on GO command
   IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$", RegexOptions.Multiline | RegexOptions.IgnoreCase);

   conn.Open();
   foreach (string commandString in commandStrings)
   {
      if (commandString.Trim() != "")
      {
         using (var command = new SqlCommand(commandString, conn))
         {
            command.ExecuteNonQuery();
         }
      }
   }
   conn.Close();
}