为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕神8447489 2021-11-14 14:37:36
我在 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,我已经在我的数据库中检查了这个数字。有没有人可以帮助我理解问题?
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

如果InsertElement()每行要插入的数据都执行一次,那么对于大的no,执行会太慢。行。(此外,您正在SqlConnection为每个查询执行创建。)尝试使用单个 INSERT 查询一次添加多行:


INSERT INTO tablename

(c1,c2,c3)

VALUES

(v1,v2,v3),

(v4,v5,v6)

...


查看完整回答
反对 回复 2021-11-14
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

不要为每个插入打开一个连接。使用一个连接,然后将该连接传递给您的插入,如下所示:


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();

        }

    }

}

我还建议查看参数化您的查询,以及使用批量插入,而不是单个插入


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信