2015-10-16 74 views
2

我有一个db版本控制应用程序来更新部署的数据库。它几乎可以和所有的SQL语句一起运行,但是当我决定使用FullText Search和生成的脚本来使用像下面这样的语句时,它就会崩溃。CREATE FULLTEXT INDEX/CATALOG语句不能在用户事务中使用

CREATE FULLTEXT CATALOG [ProductCatalog] 

--Create fulltext index on Product 
CREATE FULLTEXT INDEX ON [tblProduct] KEY INDEX [PK_Catalog] 
    ON ([ProductCatalog]) WITH (CHANGE_TRACKING AUTO) 
ALTER FULLTEXT INDEX ON [tblProduct] ADD ([ProductName] LANGUAGE [English]) 
ALTER FULLTEXT INDEX ON [tblProduct] ENABLE 

我使用下面的代码到C#的SqlTransaction

SqlConnection cnn = new SqlConnection("cstring"); 
SqlTransaction trn = cnn.BeginTransaction(); 

cnn.Open(); 

using (SqlCommand cmd = cnn.CreateCommand()) 
{ 
    cmd.Connection = cnn;  
    cmd.Transaction = trn; 

    cmd.CommandText = SQLScript; 
    cmd.CommandType = CommandType.Text; 
    cmd.ExecuteNonQuery(); 
} 

trn.Commit();   
cnn.Close(); 

如何运行我的剧本没有一个事务中执行SQL文件?

+2

如果我了解清楚你想,只是注释此行是什么:cmd.Transaction =万亿; –

+0

@Keith抱歉,编辑问题时输入错误 –

回答

2

我修改我的代码来执行脚本

SqlConnection cnn = new SqlConnection("cstring"); 
SqlTransaction trn = null; 

cnn.Open(); 

using (SqlCommand cmd = cnn.CreateCommand()) 
{ 
    cmd.Connection = cnn; 

    if(!SQLScript.Contains("FULLTEXT")) 
    { 
     trn = cnn.BeginTransaction(); 
     cmd.Transaction = trn; 
    }   

    cmd.CommandText = SQLScript; 
    cmd.CommandType = CommandType.Text; 
    cmd.ExecuteNonQuery(); 
} 

if(trn!=null) 
    trn.Commit(); 

cnn.Close();