Sql Server 连接 C#:最大插入查询数

我在 C# 中遇到了 SqlConnection 问题。我做了大量的INSERT NonQuery,但是无论如何SqlConnection 总是保存在数据库中的前573 行。这是我用于查询的方法。在这种方法中有一个锁,因为我使用不同的线程来保存数据。


   public void InsertElement(string link, string titolo, string text)

    {

        string conString = "*****************";

        using (SqlConnection connection = new SqlConnection(conString))

        {

            connection.Open();


            text = text.Replace("\"", "");

            DateTime localDate = DateTime.Now;


            lock (thisLock)

            {

                string query = "IF (NOT EXISTS(SELECT * FROM Result " +

                " WHERE Link = '" + link + "')) " +

                " BEGIN " +

                " INSERT INTO Result ([Titolo],[Link],[Descrizione],[DataRicerca],[FKDatiRicercheID]) " +

                " VALUES('" + titolo + "', '" + link + "', '" + text + "', '" + localDate + "', 1) " +

                " END";


                if (connection != null)

                {

                    SqlCommand cmd = new SqlCommand(query, connection);

                    cmd.ExecuteNonQuery();

                }

            }

        }

    }

这是调用方法 InsertElement() 的循环代码


public void Save()

{

    string[] DatiLetti;

    string url = "";


    while (result.Count > 0)

    {

        try

        {

            url = result.Last();

            result.RemoveAt(result.Count - 1);


            DatiLetti = ex.DirectExtractText(url);


            if (DatiLetti[0].Length > 2)

            {

                ssc.InsertGare(url, DatiLetti[0], DatiLetti[1]);

            }

        }

        catch (Exception exc)

        {

            logger.Error("Exception SpiderSave> " + exc);

        }

    }

}

结果是一个由其他线程逐渐填充的易失性数组。我确信该数组包含超过 573 个项目。


我尝试搜索一个解决方案,但所有答案都说 SQLServer 的数据库连接数一次超过 32K,我已经在我的数据库中检查了这个数字。有没有人可以帮助我理解问题?


慕神8447489
浏览 125回答 2
2回答

长风秋雁

如果InsertElement()每行要插入的数据都执行一次,那么对于大的no,执行会太慢。行。(此外,您正在SqlConnection为每个查询执行创建。)尝试使用单个 INSERT 查询一次添加多行:INSERT INTO tablename(c1,c2,c3)VALUES(v1,v2,v3),(v4,v5,v6)...

ABOUTYOU

不要为每个插入打开一个连接。使用一个连接,然后将该连接传递给您的插入,如下所示:public void InsertElement(string link, string titolo, string text, SqlConnection conn){    text = text.Replace("\"", "");    DateTime localDate = DateTime.Now;    lock (thisLock)    {        string query = "IF (NOT EXISTS(SELECT * FROM Result " +                        " WHERE Link = '" + link + "')) " +                        " BEGIN " +                        " INSERT INTO Result ([Titolo],[Link],[Descrizione],[DataRicerca],[FKDatiRicercheID]) " +                            " VALUES('" + titolo + "', '" + link + "', '" + text + "', '" + localDate + "', 1) " +                            " END";        if (connection != null)        {            SqlCommand cmd = new SqlCommand(query, connection);            cmd.ExecuteNonQuery();        }    }}我还建议查看参数化您的查询,以及使用批量插入,而不是单个插入
打开App,查看更多内容
随时随地看视频慕课网APP