C# 如何只连接一次数据库,然后执行3次写SQL语句将3条记录插入到数据库

ba_wang_mao 2021-03-29 10:55:05
我有一个数据库,共有50多个字段,我准备将3条记录依次插入到数据库中,但是我下面的程序,连接了3次数据库,执行速度太慢,我想改造成只连接一次数据库,然后将3条记录插入到数据库中。

下面是我的原始程序代码:


//插入第一条记录
string conStr = "server=localhost;port=3306;user Id=root;password=8331; database=tp ;Allow User Variables=True";
MySqlConnection conn = new MySqlConnection(conStr);
try
{
conn.Open();
MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press) VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn);
cmd.Parameters.AddWithValue("@id", CableNo);
cmd.Parameters.AddWithValue("@d_date", dt);
cmd.Parameters.AddWithValue("@d_time", dt);
cmd.Parameters.AddWithValue("@td1", ftd[0]);
cmd.Parameters.AddWithValue("@td2", ftd[1]);
cmd.Parameters.AddWithValue("@td3", ftd[2]);


cmd.ExecuteNonQuery();

}
catch (Exception ex)//创建检查Exception对象
{
MessageBox.Show(ex.Message);//输出错误信息
}
finally
{
conn.Close();//关闭连接
}
}


//插入第二条记录
string conStr = "server=localhost;port=3306;user Id=root;password=8331; database=tp ;Allow User Variables=True";
MySqlConnection conn = new MySqlConnection(conStr);
try
{
conn.Open();
MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press) VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn);
cmd.Parameters.AddWithValue("@id", CableNo);
cmd.Parameters.AddWithValue("@d_date", dt);
cmd.Parameters.AddWithValue("@d_time", dt);
cmd.Parameters.AddWithValue("@td1", ftd[0]);
cmd.Parameters.AddWithValue("@td2", ftd[1]);
cmd.Parameters.AddWithValue("@td3", ftd[2]);

cmd.ExecuteNonQuery();

}
catch (Exception ex)//创建检查Exception对象
{
MessageBox.Show(ex.Message);//输出错误信息
}
finally
{
conn.Close();//关闭连接
}
}


//插入第三条记录
string conStr = "server=localhost;port=3306;user Id=root;password=8331; database=tp ;Allow User Variables=True";
MySqlConnection conn = new MySqlConnection(conStr);
try
{
conn.Open();
MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press) VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn);
cmd.Parameters.AddWithValue("@id", CableNo);
cmd.Parameters.AddWithValue("@d_date", dt);
cmd.Parameters.AddWithValue("@d_time", dt);
cmd.Parameters.AddWithValue("@td1", ftd[0]);
cmd.Parameters.AddWithValue("@td2", ftd[1]);
cmd.Parameters.AddWithValue("@td3", ftd[2]);

cmd.ExecuteNonQuery();

}
catch (Exception ex)//创建检查Exception对象
{
MessageBox.Show(ex.Message);//输出错误信息
}
finally
{
conn.Close();//关闭连接
}
}



...全文
436 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ba_wang_mao 2021-03-31
  • 打赏
  • 举报
回复
【tran.Commit();//提交事务,放到循环体外面】,已解决。
           private void button2_Click(object sender, EventArgs e)
        {
            string CableNo="COM2";
            float[] ftd = new float[40];
            float[] fpd = new float[10];
            float fpress=0x06;
            MySqlTransaction tran = null;
            string conStr = "server=localhost;port=3306;user Id=root;password=31; database=tx ;Allow User Variables=True";
            MySqlConnection conn = new MySqlConnection(conStr);
            try
            {
                conn.Open();
                tran = conn.BeginTransaction();
                MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press)  VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn);
                for (int k = 0; k < 3; k++)
                {
                    switch (k)
                    {
                        case 0:
                            CableNo = "COM1";
                            break;
                        case 1:
                            CableNo = "COM2";
                            break;
                        case 2:
                            CableNo = "COM3";
                            break;                      
                    }
                    for (int i = 0; i < 40; i++)
                        ftd[i] = k + 1;
                    for (int j = 0; j < 10; j++)
                        fpd[j] = k * 10 + 1;

                    cmd.Parameters.AddWithValue("@id", CableNo);
                    cmd.Parameters.AddWithValue("@d_date", "2021-03-30 09:00:00");
                    cmd.Parameters.AddWithValue("@d_time", "2021-03-30 09:00:00");
                    cmd.Parameters.AddWithValue("@td1", ftd[0]);
                    cmd.Parameters.AddWithValue("@td2", ftd[1]);
                    cmd.Parameters.AddWithValue("@td3", ftd[2]);
                    cmd.Parameters.AddWithValue("@td4", ftd[3]);
                    cmd.Parameters.AddWithValue("@td5", ftd[4]);
                    cmd.Parameters.AddWithValue("@td6", ftd[5]);
                    cmd.Parameters.AddWithValue("@td7", ftd[6]);
                    cmd.Parameters.AddWithValue("@td8", ftd[7]);
                    cmd.Parameters.AddWithValue("@td9", ftd[8]);
                    cmd.Parameters.AddWithValue("@td10", ftd[9]);
                    cmd.Parameters.AddWithValue("@td11", ftd[10]);
                    cmd.Parameters.AddWithValue("@td12", ftd[11]);
                    cmd.Parameters.AddWithValue("@td13", ftd[12]);
                    cmd.Parameters.AddWithValue("@td14", ftd[13]);
                    cmd.Parameters.AddWithValue("@td15", ftd[14]);
                    cmd.Parameters.AddWithValue("@td16", ftd[15]);
                    cmd.Parameters.AddWithValue("@td17", ftd[16]);
                    cmd.Parameters.AddWithValue("@td18", ftd[17]);
                    cmd.Parameters.AddWithValue("@td19", ftd[18]);
                    cmd.Parameters.AddWithValue("@td20", ftd[19]);
                    cmd.Parameters.AddWithValue("@td21", ftd[20]);
                    cmd.Parameters.AddWithValue("@td22", ftd[21]);
                    cmd.Parameters.AddWithValue("@td23", ftd[22]);
                    cmd.Parameters.AddWithValue("@td24", ftd[23]);
                    cmd.Parameters.AddWithValue("@td25", ftd[24]);
                    cmd.Parameters.AddWithValue("@td26", ftd[25]);
                    cmd.Parameters.AddWithValue("@td27", ftd[26]);
                    cmd.Parameters.AddWithValue("@td28", ftd[27]);
                    cmd.Parameters.AddWithValue("@td29", ftd[28]);
                    cmd.Parameters.AddWithValue("@td30", ftd[29]);
                    cmd.Parameters.AddWithValue("@td31", ftd[30]);
                    cmd.Parameters.AddWithValue("@td32", ftd[31]);
                    cmd.Parameters.AddWithValue("@td33", ftd[32]);
                    cmd.Parameters.AddWithValue("@td34", ftd[33]);
                    cmd.Parameters.AddWithValue("@td35", ftd[34]);
                    cmd.Parameters.AddWithValue("@td36", ftd[35]);
                    cmd.Parameters.AddWithValue("@td37", ftd[36]);
                    cmd.Parameters.AddWithValue("@td38", ftd[37]);
                    cmd.Parameters.AddWithValue("@td39", ftd[38]);
                    cmd.Parameters.AddWithValue("@td40", ftd[39]);

                    cmd.Parameters.AddWithValue("@pd1", fpd[0]);
                    cmd.Parameters.AddWithValue("@pd2", fpd[1]);
                    cmd.Parameters.AddWithValue("@pd3", fpd[2]);
                    cmd.Parameters.AddWithValue("@pd4", fpd[3]);
                    cmd.Parameters.AddWithValue("@pd5", fpd[4]);
                    cmd.Parameters.AddWithValue("@pd6", fpd[5]);
                    cmd.Parameters.AddWithValue("@pd7", fpd[6]);
                    cmd.Parameters.AddWithValue("@pd8", fpd[7]);
                    cmd.Parameters.AddWithValue("@pd9", fpd[8]);
                    cmd.Parameters.AddWithValue("@pd10", fpd[9]);
                    cmd.Parameters.AddWithValue("@a_press", fpress);
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                 
                }
                tran.Commit();//提交事务
            }
            catch (Exception ex)//创建检查Exception对象             
            {
                MessageBox.Show(ex.Message);//输出错误信息
                if (tran != null) tran.Rollback();
            }
            finally
            {
                if (tran != null)
                    tran.Dispose();
                if (conn.State == ConnectionState.Open)
                    conn.Close();//关闭连接  
            }
        }
        
    }
ba_wang_mao 2021-03-31
  • 打赏
  • 举报
回复
引用 9 楼 Hello World, 的回复:
[quote=引用 7 楼 ba_wang_mao 的回复:][quote=引用 4 楼 Hello World, 的回复:]大概这样: [code=c#] string conStr = "server=localhost;port=3306;user Id=root;password=8331; database=tp ;Allow User Variables=True"; MySqlConnection conn = new MySqlConnection(conStr); MySqlTransaction tran = null; try { conn.Open(); tran = conn.BeginTransaction(); MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press) VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn); for (int i = 0; i < 3; i++) { //这里循环执行,根据实际情况修改 cmd.Parameters.AddWithValue("@id", CableNo); cmd.Parameters.AddWithValue("@d_date", dt); cmd.Parameters.AddWithValue("@d_time", dt); cmd.Parameters.AddWithValue("@td1", ftd[0]); cmd.Parameters.AddWithValue("@td2", ftd[1]); cmd.Parameters.AddWithValue("@td3", ftd[2]); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); tran.Commit();//提交事务 } } catch (Exception ex)//创建检查Exception对象 { MessageBox.Show(ex.Message);//输出错误信息 if (tran != null) tran.Rollback(); } finally { if (tran != null) tran.Dispose(); if (conn.State == ConnectionState.Open) conn.Close();//关闭连接 } [/code]
系统报错啦! [/quote] 提交事务要放在循环外面: tran.Commit();//提交事务,放到循环体外面[/quote] 谢谢,【tran.Commit();//提交事务,放到循环体外面】已解决。
Hello World, 2021-03-31
  • 打赏
  • 举报
回复
引用 7 楼 ba_wang_mao 的回复:
[quote=引用 4 楼 Hello World, 的回复:]大概这样: [code=c#] string conStr = "server=localhost;port=3306;user Id=root;password=8331; database=tp ;Allow User Variables=True"; MySqlConnection conn = new MySqlConnection(conStr); MySqlTransaction tran = null; try { conn.Open(); tran = conn.BeginTransaction(); MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press) VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn); for (int i = 0; i < 3; i++) { //这里循环执行,根据实际情况修改 cmd.Parameters.AddWithValue("@id", CableNo); cmd.Parameters.AddWithValue("@d_date", dt); cmd.Parameters.AddWithValue("@d_time", dt); cmd.Parameters.AddWithValue("@td1", ftd[0]); cmd.Parameters.AddWithValue("@td2", ftd[1]); cmd.Parameters.AddWithValue("@td3", ftd[2]); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); tran.Commit();//提交事务 } } catch (Exception ex)//创建检查Exception对象 { MessageBox.Show(ex.Message);//输出错误信息 if (tran != null) tran.Rollback(); } finally { if (tran != null) tran.Dispose(); if (conn.State == ConnectionState.Open) conn.Close();//关闭连接 } [/code]
系统报错啦! [/quote] 提交事务要放在循环外面: tran.Commit();//提交事务,放到循环体外面
吉普赛的歌 2021-03-31
  • 打赏
  • 举报
回复
增加下面的方法。 你自己构建好 DataTable, 传下参数就可以了, 够傻瓜化吧?
/// <summary>
///大批量数据插入,返回成功插入行数
/// </summary>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="table">数据表</param>
/// <returns>返回成功插入行数</returns>
public static int BulkInsert(string connectionString, DataTable table)
{
    if (string.IsNullOrEmpty(table.TableName)) throw new Exception("请给DataTable的TableName属性附上表名称");
    if (table.Rows.Count == 0) return 0;
    int insertCount = 0;
    string tmpPath = Path.GetTempFileName();
    string csv = DataTableToCsv(table);
    File.WriteAllText(tmpPath, csv);
    using (MySqlConnection conn = new MySqlConnection(connectionString))
    {
        MySqlTransaction tran = null;
        try
        {
            conn.Open();
            tran = conn.BeginTransaction();
            MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
            {
                FieldTerminator = ",",
                FieldQuotationCharacter = '"',
                EscapeCharacter = '"',
                LineTerminator = "\r\n",
                FileName = tmpPath,
                NumberOfLinesToSkip = 0,
                TableName = table.TableName,
            };
            bulk.Columns.AddRange(table.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
            insertCount = bulk.Load();
            tran.Commit();
        }
        catch (MySqlException ex)
        {
            if (tran != null) tran.Rollback();
            throw ex;
        }
    }
    File.Delete(tmpPath);
    return insertCount;
}
ba_wang_mao 2021-03-30
  • 打赏
  • 举报
回复
引用 4 楼 Hello World, 的回复:
大概这样: [code=c#] string conStr = "server=localhost;port=3306;user Id=root;password=8331; database=tp ;Allow User Variables=True"; MySqlConnection conn = new MySqlConnection(conStr); MySqlTransaction tran = null; try { conn.Open(); tran = conn.BeginTransaction(); MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press) VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn); for (int i = 0; i < 3; i++) { //这里循环执行,根据实际情况修改 cmd.Parameters.AddWithValue("@id", CableNo); cmd.Parameters.AddWithValue("@d_date", dt); cmd.Parameters.AddWithValue("@d_time", dt); cmd.Parameters.AddWithValue("@td1", ftd[0]); cmd.Parameters.AddWithValue("@td2", ftd[1]); cmd.Parameters.AddWithValue("@td3", ftd[2]); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); tran.Commit();//提交事务 } } catch (Exception ex)//创建检查Exception对象 { MessageBox.Show(ex.Message);//输出错误信息 if (tran != null) tran.Rollback(); } finally { if (tran != null) tran.Dispose(); if (conn.State == ConnectionState.Open) conn.Close();//关闭连接 } [/code]
系统报错啦!
杀马特丶蛮牛 2021-03-29
  • 打赏
  • 举报
回复
打开连接-打开事务-插入数据-提交事务-关闭连接
杀马特丶蛮牛 2021-03-29
  • 打赏
  • 举报
回复
引用 3 楼 ba_wang_mao 的回复:
[quote=引用 1 楼 杀马特丶蛮牛 的回复:]打开连接-打开事务-插入数据-提交事务-关闭连接
能有代码吗?你说的太专业啦![/quote] 大概这样吧
morliz子轩 2021-03-29
  • 打赏
  • 举报
回复
搞不懂,为啥不用EF实体框架。 EF直接db.<Entity>.Add()就可以完成。 批量Insert,db.<Entity>.AddRange() 批量插入,用扩展插件:Z.EntityFramework.BulkInsert db.BulkInsert(Entity)
Hello World, 2021-03-29
  • 打赏
  • 举报
回复
大概这样: [code=c#] string conStr = "server=localhost;port=3306;user Id=root;password=8331; database=tp ;Allow User Variables=True"; MySqlConnection conn = new MySqlConnection(conStr); MySqlTransaction tran = null; try { conn.Open(); tran = conn.BeginTransaction(); MySqlCommand cmd = new MySqlCommand("insert into table1(id,d_date,d_time,td1,td2,td3,td4,td5,td6,td7,td8,td9,td10,td11,td12,td13,td14,td15,td16,td17,td18,td19,td20,td21,td22,td23,td24,td25,td26,td27,td28,td29,td30,td31,td32,td33,td34,td35,td36,td37,td38,td39,td40,pd1,pd2,pd3,pd4,pd5,pd6,pd7,pd8,pd9,pd10,a_press) VALUES(@id,@d_date,@d_time,@td1,@td2,@td3,@td4,@td5,@td6,@td7,@td8,@td9,@td10,@td11,@td12,@td13,@td14,@td15,@td16,@td17,@td18,@td19,@td20,@td21,@td22,@td23,@td24,@td25,@td26,@td27,@td28,@td29,@td30,@td31,@td32,@td33,@td34,@td35,@td36,@td37,@td38,@td39,@td40,@pd1,@pd2,@pd3,@pd4,@pd5,@pd6,@pd7,@pd8,@pd9,@pd10,@a_press);", conn); for (int i = 0; i < 3; i++) { //这里循环执行,根据实际情况修改 cmd.Parameters.AddWithValue("@id", CableNo); cmd.Parameters.AddWithValue("@d_date", dt); cmd.Parameters.AddWithValue("@d_time", dt); cmd.Parameters.AddWithValue("@td1", ftd[0]); cmd.Parameters.AddWithValue("@td2", ftd[1]); cmd.Parameters.AddWithValue("@td3", ftd[2]); cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); tran.Commit();//提交事务 } } catch (Exception ex)//创建检查Exception对象 { MessageBox.Show(ex.Message);//输出错误信息 if (tran != null) tran.Rollback(); } finally { if (tran != null) tran.Dispose(); if (conn.State == ConnectionState.Open) conn.Close();//关闭连接 } [/code]
ba_wang_mao 2021-03-29
  • 打赏
  • 举报
回复
引用 1 楼 杀马特丶蛮牛 的回复:
打开连接-打开事务-插入数据-提交事务-关闭连接
能有代码吗?你说的太专业啦!
HerryDong 2021-03-29
  • 打赏
  • 举报
回复
一楼正解,connection.BeginTransaction()开启事务即可。
本文介绍C#访问操作Access数据库的基础知识,并提供一个相关的例程。 1.通过ADO.NET的OleDb相关类来操作Access 主要知识点如下: using System.Data.OleDb; using System.Data; 连接字符串:String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=product.mdb"; 建立连接:OleDbConnection connection = new OleDbConnection(connectionString); 使用OleDbCommand类来执行Sql语句: OleDbCommand cmd = new OleDbCommand(sql, connection); connection.Open(); cmd.ExecuteNonQuery(); 2.取得Access自增标识字段在插入数据后的id值 cmd.CommandText = @"select @@identity"; int value = Int32.Parse(cmd.ExecuteScalar().ToString()); return value; 3.执行事务 需要用到OleDbTransaction,关键语句如下: OleDbConnection connection = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand(); OleDbTransaction transaction = null; cmd.Connection = connection; connection.Open(); transaction = connection.BeginTransaction(); cmd.Transaction = transaction; cmd.CommandText=sql1; cmd.ExecuteNonQuery(); cmd.CommandText=sql2; cmd.ExecuteNonQuery(); transaction.Commit(); 4.执行查询,返回DataSet OleDbConnection connection = new OleDbConnection(connectionString); DataSet ds = new DataSet(); connection.Open(); OleDbDataAdapter da = new OleDbDataAdapter(sql, connection); da.Fill(ds,"ds"); 5.分页查询 分页查询使用OleDbDataReader来读取数据,并将结果到一个DataSet中返回。 以上内容封装为三个可重用的类:AccessDBUtil,AccessPageUtil,Page 代码这里下载AccessDBUtilDemo.rar (191.37 KB , 下载:999) 本例程是一个c#的winform程序,但是数据访问类可以在Web环境下使用。 本例程演示了: 1.Access数据库插入,更新,修改,查询; 2.带参数的sql语句的使用,而不是拼SQL; 3.使用DataReader的分页查询,而不是用嵌套的SQL语句来分页; 4.用事务同时执行多个SQL语句; 5.在插入数据的同时返回最新的ID值; 6.整型,实型,字符串,日期型,布尔型五种数据类型的操作; 7.使用正则表达式来验证整数和实数; 8.listview用来显示数据的一些基本用法。 本示例不包括: 1.高效的分页查询,仅仅是提供了一种分页的方法,但我认为DataReader应该比嵌套的SQL语句快(未测试)。 2.完善的分页封装,只提供了分页的简单包装。 3.嵌套的事务处理,提供了同时执行多个sql语句的事务处理,但不支持嵌套事务。 4.listview的使用,只是利用winform控件来演示数据访问,因此不能作为winform编程的良好示例,例如添加数据时界面并没有很好地更新。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧