精华内容
下载资源
问答
  • 多线程下oracle数据库连接失败的问题
    2021-04-11 18:57:43

    问题描述:多线程下连接三个oracle的库,报错,分别单独连接三个库,能正常连接。
    解决:因为最大连接数超过了150,所以设置一下最大连接数即可。

    select count(*) from v$process;  ----- 查看当前连接的进程
    select value from v$parameter where name = 'processes';   -----查看当前最多看连接的进程数
    alter system set processes = 450 scope = spfile;--- 最高可连接进程数设置为45
    shutdown immediate;---立即重启服务
    startup;---立即重启服务
    
    更多相关内容
  • 多线程连接数据库

    千次阅读 2022-04-09 19:32:48
    多线程 update MySQL 多线程 update MySQL 数据库里面有一批数据,使用 python 串行更新代码如下: from sqlalchemy import create_engine import time import pandas as pd start = time.time() # 连接 ...

    目录

    多线程 update MySQL


    多线程 update MySQL

    数据库里面有一批数据,使用 python 串行更新代码如下:

    from sqlalchemy import create_engine
    import time
    import pandas as pd
    
    
    start = time.time()
    
    # 连接
    con = create_engine('mysql+pymysql://root:123456@localhost:3306/activity_analysic?charset=utf8')
    
    sql1 = """SELECT distinct vin FROM `activity` limit 30"""
    vin = list(pd.read_sql(sql1,con)['vin'])
    
    for i,v in enumerate(vin):
        sqlupdate = """update activity set speed = 400 where vin = '%s'""" % v
        con.execute(sqlupdate)
        print(i,v)
    
    end = time.time()
    print(end - start)
    

    用了 250s,开两个线程去更新数据库,用时 70s,代码如下:

    from sqlalchemy import create_engine
    import pandas as pd
    import threading
    
    
    def update_sql(i,v):
        try:
            con = create_engine('mysql+pymysql://root:123456@localhost:3306/activity_analysic?charset=utf8',
                                pool_size=100)
            sqlupdate = """update activity set speed = 1000 where vin = '%s'""" % v
            con.execute(sqlupdate)
            print(i,v)
        except:
            time.sleep(3)
            con = create_engine('mysql+pymysql://root:123456@localhost:3306/activity_analysic?charset=utf8',
                                pool_size=100)
            sqlupdate = """update activity set speed = 700 where vin = '%s'""" % v
            con.execute(sqlupdate)
            print(i,v)
        finally:
            con.dispose()
    
    
    # 连接数据库
    con = create_engine('mysql+pymysql://root:123456@localhost:3306/activity_analysic?charset=utf8',pool_size=100)
    
    ##线程数
    thread_nums = 2
    pool_sema = threading.BoundedSemaphore(value=thread_nums)
    threads = []
    
    sql1 = """SELECT distinct vin FROM `activity` limit 30"""
    vin = list(pd.read_sql(sql1,con)['vin'])
    
    for i,v in enumerate(vin):
        th = threading.Thread(target=update_sql, args=(i,v,))
        th.start()
        threads.append(th)
    
    

    多线程连接使用数据库需要注意几点:

    1.sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out,出现这个错误,是因为连接池超过限制了,在连接中加 pool_size=100,最后也加一个 con.dispose() 回收连接,就解决了。

    2.Lock wait timeout exceeded,这个错误是因为所有线程都在更新,前一个还没有用完,下一个就等待,超时了就报错,也就是死锁了,这里加一个等待 3 秒,多一点时间等待上一个线程执行完毕,可具体设置,这是最简单粗暴的方法。

    展开全文
  • //根据行数,线程数设定每个线程要处理的数据量 for (int i = 0; i ; i++) //像线程池加入执行队列 { ThreadPool.QueueUserWorkItem(data => { int iIndex = (int)data;//线程序号0->MaxThread DataRowCollection ...

    AutoResetEvent[] autoEvents = InitAutoResetEvent();

    List lst = new List();

    //得到处理数据 集

    DataSet ds = GetBeforeJP();

    //验证数据是否存在(null)

    if (!DataHelper.VerifyDataSet(ds))

    {

    Thread.Sleep(100);

    continue;  //如果检测DataSet可行,则继续

    }

    int iCount = ds.Tables[0].Rows.Count; //获取要处理的数据行数

    int iBlock = (int)Math.Ceiling((double)iCount / MaxThread);//根据行数,线程数设定每个线程要处理的数据量

    for (int i = 0; i < MaxThread; i++) //像线程池加入执行队列

    {

    ThreadPool.QueueUserWorkItem(data =>

    {

    int iIndex = (int)data;//线程序号0->MaxThread

    DataRowCollection rows = ds.Tables[0].Rows;

    for (int j = 0; j < iBlock; j++)

    {

    try

    {

    if (iIndex * iBlock + j >= iCount)//避免最后一个线程索引越界

    break;

    int iSequence = DataHelper.ReadInt(rows[iIndex * iBlock + j] , "SEQUENCE");

    int iMCUID = DataHelper.ReadInt(rows[iIndex * iBlock + j] , "MCUID");

    int iLng = DataHelper.ReadInt(rows[iIndex * iBlock + j] , "LONGITUDE") / 36;

    int iLat = DataHelper.ReadInt(rows[iIndex * iBlock + j] , "LATITUDE") / 36;

    DateTime dtmPostionTime = DataHelper.ReadDateTime(rows[iIndex * iBlock + j] , "POSITIONTIME");

    DateTime dtmReceiveTime = DataHelper.ReadDateTime(rows[iIndex * iBlock + j] , "RECEIVETIME");

    try

    {

    //请求指定网页地址进行处理返回结果

    WebRequest jpRequest = WebRequest.Create(Config.BMSSettings.JPUrl + iLng.ToString() + "," + iLat.ToString() + "&t=" + m_rand.Next());

    jpRequest.Method = "get";

    jpRequest.ContentType = "application/x-www-form-urlencoded";

    jpRequest.Timeout = 8000;//设置超时

    WebResponse jpResponse = jpRequest.GetResponse();

    string strJP;

    using (StreamReader sr = new StreamReader(jpResponse.GetResponseStream()))

    {

    strJP = sr.ReadToEnd();

    if (!string.IsNullOrEmpty(strJP))

    {

    strJP = strJP.Remove(strJP.Length - 1 , 1);

    string[] strs = strJP.Split(new char[] { ',' });

    //处理完加入列表

    AddItemToList(lst , new EntityJPGpsInfo(iSequence , iMCUID , Convert.ToInt32(strs[0]) * 36 , Convert.ToInt32(strs[1]) * 36 , dtmPostionTime , dtmReceiveTime));

    }

    }

    jpResponse.Close();

    }

    catch (Exception ex)

    {

    LogHelper.Writeln("Error1:" + ex.Message);

    }

    }

    catch (Exception e)

    {

    LogHelper.Writeln("Error2:" + e.StackTrace);

    }

    }

    autoEvents[iIndex].Set();

    } , i);

    }

    //等待收到所有的信号

    ManualResetEvent.WaitAll(autoEvents);

    InsertToDB(lst); //处理完集体插入到数据库

    }

    });

    }

    catch (Exception exc)

    {

    LogHelper.Writeln("Error3:" + exc.StackTrace);

    }

    }

    ///

    /// 数据库提取预处理数据

    ///

    /// 预处理数据集

    public DataSet GetBeforeJP()

    {

    OracleParameter[] paras = new OracleParameter[]

    {

    OracleHelper.MakeOutParam("curCursor",OracleType.Cursor)

    };

    return OracleHelper.ExecuteDataSet(Config.BMSSettings.ConnectionString , "SP_GIS_GET_BEFOREJP" , paras);

    }

    ///

    /// 全部循环插入到数据库

    ///

    /// 插入数据列表

    public void InsertToDB(List lst)

    {

    using (OracleConnection conn = OracleHelper.GetConnection(Config.BMSSettings.ConnectionString))

    {

    conn.Open();

    OracleCommand command = conn.CreateCommand();

    OracleTransaction trans = conn.BeginTransaction();

    try

    {

    command.Transaction = trans;

    command.Parameters.AddRange(new OracleParameter[]

    {

    new OracleParameter("iSequence",OracleType.Number),

    new OracleParameter("iMCUID",OracleType.Number),

    new OracleParameter("iLongitude",OracleType.Number),

    new OracleParameter("iLatitude",OracleType.Number),

    new OracleParameter("dtmPositionTime",OracleType.DateTime),

    new OracleParameter("dtmReceiveTime",OracleType.DateTime)

    });

    foreach (EntityJPGpsInfo info in lst)

    {

    command.Parameters[0].Value = info.Sequence;

    command.Parameters[1].Value = info.MCUID;

    command.Parameters[2].Value = info.Longitude;

    command.Parameters[3].Value = info.Latitude;

    command.Parameters[4].Value = info.PositionTime;

    command.Parameters[5].Value = info.ReceiveTime;

    command.CommandType = CommandType.StoredProcedure;

    command.CommandText = "SP_GIS_ADD_JP";

    command.ExecuteNonQuery();

    }

    trans.Commit();

    }

    catch (Exception ex)

    {

    trans.Rollback();

    throw ex;

    }

    }

    }

    }

    展开全文
  • C# Connection:连接数据库 C# 语言中 Connection 类是 ADO.NET 组件连接数据库时第一个要使用的类,也是通过编程访问数据库的第一步。 接下来我们来了解一下 Connection 类中的常用属性和方法,以及如何连接 SQL ...

    C# Connection:连接数据库
    C# 语言中 Connection 类是 ADO.NET 组件连接数据库时第一个要使用的类,也是通过编程访问数据库的第一步。
    接下来我们来了解一下 Connection 类中的常用属性和方法,以及如何连接 SQL Server 数据库。
    Connection 类概述
    Connection 类根据要访问的数据和访问方式不同,使用的命名空间也不同,类名也稍有区别,在这里我们使用的是 SqlConnection 类,以及微软提供的 SQL Server 2014 数据库。SqlConnection 类中提供的常用属性和方法如下表所示。

    使用 Connection 类连接数据库
    在使用 Connection 类连接 SQL Server 2014 时,先要编写数据库连接串。数据库连接串的书写方法有很多,这里介绍两种常用的方法。
    第1种方式
    server = 服务器名称 / 数据库的实例名 ; uid = 登录名 ; pwd = 密码 ; database = 数据库名称
    其中:
    • server:用于指定要访问数据库的数据库实例名,服务器名称可以换成 IP 地址或者数据库所在的计算机名称,如果访问的是本机数据库,则可以使用“.”来代替,如果使用的是默认的数据库实例名,则可以省略数据库实例名。例如连接的是本机的默认数据库,则可以写成“server = .”。
    • uid:登录到指定 SQL Server 数据库实例的用户名,相当于以 SQL Server 身份验证方式登录数据库时使用的用户名,例如 sa 用户。
    • pwd:与 uid 用户对应的密码。
    • database:要访问数据库实例下的数据库名。
    第2种方式
    Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; User ID = 用户名 ; Password = 密码
    其中:
    • Data Source:与第1种连接串写法中的 server 属性的写法一样,用于指定数据库所在的服务器名称和数据库实例名,如果连接的是本机的默认数据库实例,则写成“Data Source=. ”的形式。
    • Initial Catalog:与第 1 种连接串写法中的 database 属性的写法一样,用于指定在 Data Source 中数据库实例下的数据库名。
    • User ID:与第 1 种连接串写法中的 uid 属性的写法一样,用于指定登录数据库的用户名。
    • Password:与第 1 种连接串写法中的 pwd 属性的写法一样,用于指定 User ID 用户名所对应的密码。此外,还可以在连接字符串中使用 Integrate Security = True 的属性,省略用户和密码,即以 Windows 身份验证方式登录 SQL Server 数据库。将数据库连接更改如下:
    Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; Integrate Security = True
    需要注意的是,由于在使用 Windows 身份验证的方式登录数据库时,会对数据库的安全性造成一定的影响,因此不建议使用 Windows 身份验证的方法,而是使用 SQL Server 验证方式登录数据库,即指定用户名和密码。

    提示:在 SQL Server 2014 中更改数据库的身份验证方式并不复杂,只需要在 SQL Server 的 SQL Server Management Studio 2014 中右击数据库的服务器结点,弹出如下图所示的服务器属性界面,并在界面中选择“安全性”选项。
    在这里插入图片描述

    在该界面中可以通过选择“服务器身份验证”中的两个选项来切换身份验证方式,默认情况下选中“Windows 身份验证模式”。在选中任意一种身份验证模式后需要重启 SQL Server 服务器才能完成服务器身份验证模式的更改。在完成了数据库连接串的编写后即可使用 SqlConnection 类与数据库连接,分以下 3 步完成。

    1. 创建 SqlConnection 类的实例
      对于 SqlConnection 类来说,上表中提供了两个构造方法,通常是使用带一个字符串参数的构造方法来设置数据库的连接串创建其实例,语句形式如下。
      SqlConnection 连接对象名 = new SqlConnection( 数据库连接串 );
    2. 打开数据库连接
      在创建 SqlConnection 连接类的实例后并没有连接上数据库,需要使用连接类的 Open 方法打开数据库的连接。
      在使用 Open 方法打开数据库连接时,如果数据库的连接串不正确或者数据库的服务处于关闭状态,会出现打开数据库失败的相关异常,因此需要通过异常处理来处理异常。
      打开数据库连接的语句形式如下。

    连接对象名.Open();
    3) 关闭数据库连接
    在对数据库的操作结束后要将数据库的连接断开,以节省数据库连接的资源。
    关闭数据库连接的语句形式如下。
    连接对象名.Close();
    如果在打开数据库连接时使用了异常处理,则将关闭数据库连接的语句放到异常处理的 finally 语句中,这样能保证无论是否发生了异常都将数据库连接断开,以释放资源。除了使用异常处理的方式释放资源外,还可以使用 using 的方式释放资源。
    具体的语句如下。
    using(SqlConnection 连接对象名 = new SQLConnection( 数据库连接串 ))
    {
    //打开数据库连接
    //对数据库先关操作的语句
    }
    using 关键字的用法主要有两个,一个是引用命名空间,一个是创建非托管资源对象。
    在 .NET 平台上资源分为托管资源和非托管资源,托管资源是由 .NET 框架直接提供对其资源在内存中的管理,例如声明的变量;非托管资源则不能直接由 .NET 框架对其管理,需要使用代码来释放资源,例如数据库资源、操作系统资源等。
    下面通过实例来演示 SqlConnection 类的使用。
    实例 1】创建与本机 SQL Server 数据库的连接,并使用异常处理。
    根据题目要求,连接 SQL Server 数据库时使用的用户名为 sa、密码为 pwdpwd,连接的数据库为test。创建 Windows 窗体应用程序,并在窗体上放置一个按钮,在按钮的单击事件中加入以下代码。

    1. //编写数据库连接串
    2. string connStr = “Data source=.;Initial Catalog=test;User ID=sa;Password=pwdpwd”;
    3. //创建SqlConnection的实例
    4. SqlConnection conn = null;
    5. try
    6. {
    7.  conn = new SqlConnection(connStr);
      
    8.  //打开数据库连接
      
    9.  conn.Open();
      
    10. MessageBox.Show("数据库连接成功!");
      
    11. }
    12. catch(Exception ex)
    13. {
    14. MessageBox.Show("数据库连接失败!" + ex.Message);
      
    15. }
    16. finally
    17. {
    18. if (conn != null)
      
    19. {
      
    20.     //关闭数据库连接
      
    21.     conn.Close();
      
    22. }
      
    23. }
      执行上面的代码,效果与上一实例—样。
    展开全文
  • C# 链接mysql 基本操作的多线程实现

    千次阅读 2019-03-21 23:26:54
    c# 链接mysql 多线程实现 先来看看如何链接mysql,需要用到mysql.Data.dll 这个dll不是.net自带的,自行搜索下载。 MySqlConnection conn = new MySqlConnection(connectionString);//使用MySqlConnection类来链接...
  • 多线程读取数据库

    2021-08-29 17:38:55
    连接数据库 package com.xinyuan.ms.service; import java.sql.*; import java.util.*; public class ThreadToMysql extends Thread { Integer cid; Integer num; // Integer page; public ThreadToMysql...
  • C#多线程连接mysql,Access并且比较两者的性能 vs2008 Cs3.5
  • 直接开撸。1、只需要Mysql.data.dll 下载好后随意放一个地方。2、在新建的工程里面添加引用。浏览选择下载的mysql.data.dll地址。确定后如图所示。...2、获得数据库连接/// /// 获取数据库连接/// /// public...
  • ArcEngine+C#连接SDE空间数据库
  • 我在asp.net应用程序的线程中使用数据库时遇到问题.当我想启动我的应用程序时,我想用它启动一个名为“ BackgroundWorker”的线程,该线程在后台运行,直到整个应用程序停止.问题是我在线程中的dbContext有很问题.II...
  • C#--多进程多线程访问数据库

    千次阅读 2012-11-28 17:24:28
    C#--多进程多线程访问数据库 如何让多进程多线程访问数据库,而不会选择相同的数据,这在设计分布式程序的时候经常用到,多台机器的多个进程,每个进程都有多个线程,每个线程要从数据库里取数据来处理,要实现不能...
  • C#多线程的使用

    2021-07-09 16:17:01
    多线程相关的命令 Thread、ThreadPool、Task、Async、Invoke、await Thread的使用方式 Thread的使用可以参考官方的连接: ... 简单的线程处理功能 ...这里为了演示,使用wpf 的界面整合,不过还是使用的click 耦合代码...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼unsigned int __stdcall scan(PVOID pM){char ip[20];strcpy(ip, (char*)pM);MYSQL mysql;MYSQL_RES* result;...//连接mysql数据库if(!mysql_real_connect(&m...
  • 01 为什么要使用连接数据库连接是一种关键的有限的昂贵的资源,这一点在用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这...
  • DC.CommonDbLiteLib针对SqlServer,MySQL,SQLite,Oracle,ODBC,OleDb,Firebird,PostgreSql,DB2,Informix,SqlServerCe连接进行了封装,一般情况下只需要调用一个IDatabaseInfo接口即可使用,而且切换数据库,...
  • public class JPService   {   public JPService()   {   //设定最大的Net并发连接数   System.Net.ServicePointManager.DefaultConnectionLimit = 500;   ThreadPoo
  • 集合类通常不是线程安全的,个阅读器可以安全的读取集合.但是对集合的任何修改都将为访问集合的所有线程生成不明确的结果.使用以下任何方法都可以令集合类是线程安全的 (1) 使用Synchronized 方法,则从该类派生...
  • C#MySQL连接

    2021-02-06 14:40:13
    我正在使用C#多线程应用程序并使用MySQL与整个应用程序的单一连接.但是当两个或多个线程同时尝试访问数据库时,我得到以下错误:There is already an open DataReader associated with this Connection which must be...
  • C#连接数据库open函数失败

    千次阅读 2019-10-04 07:35:14
    错误信息:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 ...
  • 多线程高并发编程MySQL数据库处理

    千次阅读 2020-08-10 17:51:44
    本文作者:陈进坚 ... 摘要 ​ 现在很多主流的编程语言都支持多线程或者协程处理,例如天生...但是多线程和单线程不同,多线程如果不对数据库做处理的话,有时候单线程跑的程序没有问题,但是一旦开启多线程数据库就.
  • 需要在C#开发的项目中连接本机的SQL server数据库。 问题解决: 以下面图中展示的SQL server manager studio展示的数据库为例, 图中展示的数据库的名称为DATA02\SQLEXPRESS,数据库登录的方式是Windows验证方式。...
  • C#中的多线程使用 – Thread 类: 使用回调函数从一个线程中检索数据 public delegate void TrackInfoCallBackDelegate(List<VehicleGPSInfo> trackInfo); //回调委托 public partial class FormMain : Form...
  • C#连接和使用MySQL数据库详细教程

    万次阅读 多人点赞 2021-03-20 18:51:55
    C#连接MySQL需要添加连接MySQL的引用 C#引用MySQL步骤: 第一种方法: 下载mysql.data.dll 将文件放在项目目录下 在VS2019项目内,引用mysql.data.dll文件 进入DLL官网下载mysql.data.dll文件(可自选版本下载) ...
  • 1、当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用完毕应该马上调用SqlDataReader.Close()关闭它。2、一个连接只能被一个SqlDataReader使用,这也是为什么要尽早关闭...
  • 第一种方法: string str="server=.;...//连接字符串 SqlConnection SCON = null;//连接对象 SqlCommand SCom=new SqlCommand();//命令对象 SCON=new SqlConnection(str); SCON.Open(); SCo...
  • C#多线程和异步

    万次阅读 多人点赞 2018-04-25 22:12:43
    一、使用计时器在某些情况下,可能不需要使用单独的线程。如果应用程序需要定期执行简单的与 UI 有关的操作,则应该考虑使用进程计时器。有时,在智能客户端应用程序中使用进程计时器,以达到下列目:• 按计划定期...
  • #region建立MySql数据库连接//////建立数据库连接.//////返回MySqlConnection对象publicMySqlConnectiongetmysqlcon(){//http://sosoft.cnblogs.com/stringM_str_sqlcon="server=localhost;userid=root;password=...
  • c#多线程总结(纯干货)

    千次阅读 2020-04-19 18:08:57
    线程基础 创建线程 View Code 暂停线程 class Program { static void Main(string[] args) { Thread t = new Thread(PrintNumbersWithDelay); t.Start(); PrintNumbers(); Co...
  • Dapper访问多数据库

    2019-01-30 12:10:43
    Dapper访问多数据库,使用方法参考单元测试UnitTest。 Oracle免客户端访问

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,333
精华内容 10,933
热门标签
关键字:

c#多线程连接数据库

c# 订阅