运行 SQL 在 C# 中使用 SMO 的脚本
Running an SQL Script using SMO In C#
我的程序中 运行 一个 SQL 脚本有问题。这是程序的代码
string databaseName = "TestDB";
Server srv1 = new Server(@"TestServer/ABCUser"); // connects to default instance
srv1.ConnectionContext.LoginSecure = false; // set to true for Windows Authentication
srv1.ConnectionContext.Login = "sa";
srv1.ConnectionContext.Password = "abcde123*";
try
{
Console.WriteLine(srv1.Information.Version); // connection is established
if(srv1.Databases[databaseName] == null)
{
Microsoft.SqlServer.Management.Smo.Database db;
db = new Microsoft.SqlServer.Management.Smo.Database(srv1, databaseName);
db.Create();
db = srv1.Databases[databaseName];
Console.WriteLine(db.CreateDate);
}
else
{
Console.WriteLine("DB Already Exists!");
}
string sqlScript = File.ReadAllText(@"D:\Projects\TrainingProject\src\TrainingDatabase\Scripts\Tables\Script01-table.sql");
Console.WriteLine(sqlScript);
srv1.ConnectionContext.ExecuteNonQuery(sqlScript);
}
catch (ConnectionFailureException e)
{
Console.WriteLine("Error in connecting to the sql server " + e.Message);
}
这是 SQL 脚本
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'FileTypes') BEGIN
CREATE TABLE FileTypes (
FileTypeID tinyint IDENTITY(1,1) NOT NULL,
TypeName varchar(500) NOT NULL
CONSTRAINT PK_FileTypes PRIMARY KEY(FileTypeID)
)
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'FileTypes')
PRINT 'Created table FileTypes'
ELSE
PRINT 'Failed to create table FileTypes'
结束
到目前为止,我已经测试过:
我已经获取到服务器信息版本(连接服务器成功)
我可以从程序创建数据库
当我在 Microsoft SQL Server Management Studio
上将它用作查询时,该脚本正在运行
Console.WriteLine(sqlScript);
命令确实显示了正确的 SQL 脚本
问题是 srv1.ConnectionContext.ExecuteNonQuery(sqlScript);
不工作。
有人知道答案吗?
这些是我用来参考的Whosebug问题:Execute a large SQL script (with GO commands)
原来我在这一行中犯了一个错误:srv1.ConnectionContext.ExecuteNonQuery(sqlScript);
它在主数据库中创建了 table,当时它应该是这样的:
srv1.Databases[databaseName].ExecuteNonQuery(sqlScript);
我的程序中 运行 一个 SQL 脚本有问题。这是程序的代码
string databaseName = "TestDB";
Server srv1 = new Server(@"TestServer/ABCUser"); // connects to default instance
srv1.ConnectionContext.LoginSecure = false; // set to true for Windows Authentication
srv1.ConnectionContext.Login = "sa";
srv1.ConnectionContext.Password = "abcde123*";
try
{
Console.WriteLine(srv1.Information.Version); // connection is established
if(srv1.Databases[databaseName] == null)
{
Microsoft.SqlServer.Management.Smo.Database db;
db = new Microsoft.SqlServer.Management.Smo.Database(srv1, databaseName);
db.Create();
db = srv1.Databases[databaseName];
Console.WriteLine(db.CreateDate);
}
else
{
Console.WriteLine("DB Already Exists!");
}
string sqlScript = File.ReadAllText(@"D:\Projects\TrainingProject\src\TrainingDatabase\Scripts\Tables\Script01-table.sql");
Console.WriteLine(sqlScript);
srv1.ConnectionContext.ExecuteNonQuery(sqlScript);
}
catch (ConnectionFailureException e)
{
Console.WriteLine("Error in connecting to the sql server " + e.Message);
}
这是 SQL 脚本
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'FileTypes') BEGIN
CREATE TABLE FileTypes (
FileTypeID tinyint IDENTITY(1,1) NOT NULL,
TypeName varchar(500) NOT NULL
CONSTRAINT PK_FileTypes PRIMARY KEY(FileTypeID)
)
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'FileTypes')
PRINT 'Created table FileTypes'
ELSE
PRINT 'Failed to create table FileTypes'
结束
到目前为止,我已经测试过:
我已经获取到服务器信息版本(连接服务器成功)
我可以从程序创建数据库
当我在 Microsoft SQL Server Management Studio
上将它用作查询时,该脚本正在运行
Console.WriteLine(sqlScript);
命令确实显示了正确的 SQL 脚本
问题是 srv1.ConnectionContext.ExecuteNonQuery(sqlScript);
不工作。
有人知道答案吗?
这些是我用来参考的Whosebug问题:Execute a large SQL script (with GO commands)
原来我在这一行中犯了一个错误:srv1.ConnectionContext.ExecuteNonQuery(sqlScript);
它在主数据库中创建了 table,当时它应该是这样的:
srv1.Databases[databaseName].ExecuteNonQuery(sqlScript);