是否可以从我的Asp.net MVC(EF)应用程序中连接到另一个数据库,运行一些脚本,然后关闭连接。
因为我一运行该应用程序,该应用程序就已经连接到默认数据库。然后我可以同时连接到另一个(从控制器操作)一段时间,并在那个上运行一些脚本,然后关闭连接吗?
使用其他数据库的连接字符串设置一个单独的上下文,并使用下面的选项之一。
为非实体类型编写SQL查询
可以使用Database类上的SqlQuery方法创建返回任何类型实例(包括基元类型)的SQL查询。例如:
using (var context = new BloggingContext())
{
var blogNames = context.Database.SqlQuery<string>(
"SELECT Name FROM dbo.Blogs").ToList();
}
即使对象是实体类型的实例,上下文也永远不会跟踪从数据库上的SqlQuery返回的结果。
向数据库发送原始命令
可以使用数据库上的ExecuteSqlCommand方法将非查询命令发送到数据库。例如:
using (var context = new BloggingContext())
{
context.Database.ExecuteSqlCommand(
"UPDATE dbo.Blogs SET Name = 'Another Name' WHERE BlogId = 1");
}
请注意,在从数据库加载或重新加载实体之前,使用ExecuteSqlCommand对数据库中数据所做的任何更改对上下文都是不透明的。
输出参数
如果使用输出参数,则在完全读取结果之前,它们的值将不可用。
好的。这就是我在我的控制器中所做的
public class AdminController : Controller
{
public ActionResult Install()
{
foreach (ConnectionStringSettings c in System.Configuration.ConfigurationManager.ConnectionStrings)
{
//get all files from this folder except insert and mysql create scripts and then run each of them
string script = System.IO.File.ReadAllText(@"C:Test.sql");
MySqlConnection conn = new MySqlConnection(c.ConnectionString);
try
{
conn.Open();
MySqlScript m = new MySqlScript(conn, script);
m.Delimiter = "$$";
m.Execute();
conn.Close();
}
catch { }
}
return View();
}
}