执行SQL时忽略“丢失”数据库

时间:2011-08-02 14:07:14

标签: c# sql sql-server

我正在编写一个为另一个程序创建SQL Server数据库的应用程序。为此,我加载了一个包含CREATE DATABASECREATE TABLE等的大型SQL脚本。

脚本的第一行是:

/*CREATE DATABASE*/
USE [master]
GO
CREATE DATABASE [MultiRisk5] COLLATE Latin1_General_CI_AS
GO
USE [MultiRisk5]
GO

和C#代码:

var sqlConn = new SqlConnection("myConnection");
var cmd = new SqlCommand("mySqlScript", sqlConn);
sqlConn.Open();
cmd.ExecuteNonQuery();
sqlConn.Close();

当我运行程序时,我在USE语句上得到一个异常,告诉我数据库MultiRisk5不存在。

当我刚创建数据库时,怎么会这样?在SQL Server Management Studio中执行时,脚本运行正常。

3 个答案:

答案 0 :(得分:1)

您无法在包含GO的c#中加载脚本并运行它。

GO仅识别SQL Server客户端工具,并作为批处理分隔符。数据库引擎无法识别它。有关如何执行此操作的更多信息,请参阅这些问题

此外,SqlConnection是否尝试连接到MultiRisk5?如果是这样,那么在运行USE master

之前也会出错

答案 1 :(得分:0)

您可能想尝试在try catch块中执行查询以查看返回的内容。这是解决问题的第一步。

答案 2 :(得分:0)

也许您的应用没有相应的权限来创建数据库? 在继续之前,您应该检查数据库创建是否成功。