C# SMO中的连接超时
我正在向数据库中插入大量行,并尝试在其上建立主键。如果我立即创建表并建立一个键,即使使用SQLBulkCopy命令插入数据也需要10倍的时间。因此,这不是一个可行的选择。我现在要做的是插入数据,在全部插入数据之后,使用SMO创建主键。问题是,即使连接字符串中的超时设置为0,alter()命令仍会出现超时异常。有什么办法可以解决这个问题吗C# SMO中的连接超时,c#,primary-key,smo,C#,Primary Key,Smo,我正在向数据库中插入大量行,并尝试在其上建立主键。如果我立即创建表并建立一个键,即使使用SQLBulkCopy命令插入数据也需要10倍的时间。因此,这不是一个可行的选择。我现在要做的是插入数据,在全部插入数据之后,使用SMO创建主键。问题是,即使连接字符串中的超时设置为0,alter()命令仍会出现超时异常。有什么办法可以解决这个问题吗 connectionString.ConnectTimeout = 0; ServerConnection scon = null; using (SqlCo
connectionString.ConnectTimeout = 0;
ServerConnection scon = null;
using (SqlConnection conn = new SqlConnection(connectionString.ConnectionString))
{
conn.Open();
try
{
scon = new ServerConnection(conn);
Console.WriteLine("Server Connection Timeout: " + scon.ConnectTimeout);
Server serv = new Server(scon);
Database db = serv.Databases[connectionString.InitialCatalog];
Table table = db.Tables[tableName];
Index i = new Index(table, "pk_" + table.Name);
i.IndexKeyType = IndexKeyType.DriPrimaryKey;
foreach (String s in PrimaryKey)
{
i.IndexedColumns.Add(new IndexedColumn(i, s.Trim()));
}
table.Indexes.Add(i);
table.Alter();
scon.Disconnect();
}
finally
{
conn.Close();
}
}
显然,ServerConnection还有一个语句超时。SMO充满了这些隐藏的超时。包括SQLBulkCopy。不过,感谢@Derek指出这一点。答案是您必须将StatementTimeout设置为0。我现在正在测试这一点,但它似乎是答案
使用SMO是一项要求吗?@MichaelPerrenoud我希望获得干净一致的代码。您想创建一个SQL脚本并运行它吗?您不需要conn.close(),您已经将连接封装在Using语句中,连接将自动关闭。@Derek我知道这一点,现在我只是想在表中修复超时问题。Alter();scon=新服务器连接(conn);scon.ConnectionContext.StatementTimeout=0;阅读此文,可能会有所帮助:-不幸的是,在2.5小时后,我遇到了一个不同的异常。还有一些事情需要超时。然而,在尝试应用主键超过2个小时后,我认为这是合理的。