Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SMO中的连接超时_C#_Primary Key_Smo - Fatal编程技术网

C# SMO中的连接超时

C# SMO中的连接超时,c#,primary-key,smo,C#,Primary Key,Smo,我正在向数据库中插入大量行,并尝试在其上建立主键。如果我立即创建表并建立一个键,即使使用SQLBulkCopy命令插入数据也需要10倍的时间。因此,这不是一个可行的选择。我现在要做的是插入数据,在全部插入数据之后,使用SMO创建主键。问题是,即使连接字符串中的超时设置为0,alter()命令仍会出现超时异常。有什么办法可以解决这个问题吗 connectionString.ConnectTimeout = 0; ServerConnection scon = null; using (SqlCo

我正在向数据库中插入大量行,并尝试在其上建立主键。如果我立即创建表并建立一个键,即使使用SQLBulkCopy命令插入数据也需要10倍的时间。因此,这不是一个可行的选择。我现在要做的是插入数据,在全部插入数据之后,使用SMO创建主键。问题是,即使连接字符串中的超时设置为0,alter()命令仍会出现超时异常。有什么办法可以解决这个问题吗

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个小时后,我认为这是合理的。