C# SQL数据库的基础增删改查和事务

刚学了C#中写SQL数据库的增删改查,只是最基础SQL语句使用,深入地等待学习中。

在操作数据库之前,要先下载SQL Server与C#连接使用,数据库的表都是放在SQL Server当中的,C#只是链接SQL Server从而操作里面的数据库表。

现在开始C#代码编写:

一、定义连接字符串,用来链接SQL Server

string str_con = "server=.(服务器名称一般为 . );database=WordBook(数据库名称);uid=sa(服务器登录名);pwd=123(服务器密码)";

二、有了链接字符串之后,开始数据库操作

 1、数据库查询

定义了一个查询方法,用来调用

public DataSet queryDatabase(string sql)    //sql是查询语句
        {
            //储存数据的工具初始化
            DataSet ds = new DataSet();
            //相当于链接数据库的一个工具类(连接字符串)
            using (SqlConnection con = new SqlConnection(str_con))
            {
                con.Open();  //打开
                //用SqlConnection工具链接数据库,在通过sql查询语句查询结果现存入sql适配器
                SqlDataAdapter sda = new SqlDataAdapter(sql,con);   //(查询语句和连接工具)
                sda.Fill(ds);    //将适配器数据存入DataSet工具中
                con.Close();   //用完关闭SqlConnection工具
                return ds;
            }
        }

在需要查询数据库的地方调用此方法:

private void query() {
            //查询WordBook表中,book_key字段数值为7的那一行数据
            //string sql = "select * from Word_Book where book_key='7'";

            string sql = "select * from Word_Book ";     //查询全表
            DataSet ds = help.queryDatabase(sql);        //查询到数据
            DataTable dt = ds.Tables[0];                       //把查到的数据存入数据表中
            sqlDataResult.DataSource = dt;                  //把数据赋值给gridView展示(全表)

            // string str=dt.Rows[0][1].ToString();//查找表中某一个内容
            // MessageBox.Show(str);
        }

2、数据库添加、删除、修改

C#中数据库的添加、删除、修改用的是同断代码,所以定义了一个方法,用来调用:

public int changeSqlData(String sql)
        {
            using(SqlConnection con=new SqlConnection(str_con))
            {
                con.Open();
                //操作数据库的工具SqlCommand
                SqlCommand cmd = new SqlCommand(sql, con);//(操作语句和链接工具)
                int i=cmd.ExecuteNonQuery();//执行操作返回影响行数()
                con.Close();
                return i;
            }
        }

在需要操作数据库的地方调用此方法:

①数据库添加:

 private void btn_add_Click(object sender, EventArgs e)
        {
            //sql添加数据 insert into 表名(字段,字段...) values(‘内容’,‘内容’...)
            string sql = "insert into Word_Book(book_word_CN,book_word_JP,book_word_Roma,book_nominal," +
                "book_gloze) values('" + book_word_CN.Text.Trim()+"','"+ book_word_JP .Text.Trim() + "','"
                + book_word_Roma .Text.Trim() + "','"+ book_nominal.Text.Trim() + "','" + book_gloze.Text.Trim() + "')";
                int i=help.changeSqlData(sql);
            if (i == 0) MessageBox.Show("添加失败", "提示:");
            else MessageBox.Show("添加成功", "提示:");
        }

②数据库删除:

 private void btn_delete_Click(object sender, EventArgs e)
        {
            //根据同个字段中不同内容删除多行
            //delete from Word_Book where book_key in (1,2,3)

            //sql删除数据delete 表名 where 字段='内容'单个条件用or链接,多个条件用and链接
            string sql = "delete from Word_Book where book_key='"+book_key.Text.Trim()+"'";
            int i=help.changeSqlData(sql);
            if (i == 0) MessageBox.Show("删除失败", "提示:");
            else MessageBox.Show("删除成功", "提示:");
        }

②数据库更新:

 private void btn_update_Click(object sender, EventArgs e)
        {
            //根据条件修改多个字段内容
            //update 表名 set 字段='内容', 字段='内容' where 条件字段='内容'
            string sql = "update Word_Book set book_word_CN='"+book_word_CN.Text.Trim()+
                "', book_word_JP='"+book_word_JP.Text.Trim()+"'where book_key='" + book_key.Text.Trim()+"'";
            int i = help.changeSqlData(sql);
            if (i == 0) MessageBox.Show("修改失败", "提示:");
            else MessageBox.Show("修改成功", "提示:");
        }

3、数据库事务操作数据库

用数据库事务相当于把数据库操作捆绑执行,只要其中一条sql语句失败,直接返回,不进行数据库操作,只有全部执行正确,才会更新数据库。

定义了一个查询方法,用来调用

  public bool openTrans(List<String> lst)
        {
            using (SqlConnection con=new SqlConnection(str_con))
            {
                con.Open();
                //开启事务
                SqlTransaction trans = con.BeginTransaction();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;//添加链接工具
                cmd.Transaction = trans;//添加事务
                try
                {
                    for (int i = 0; i < lst.Count; i++)
                    {
                        string sql=lst[i].ToString();//获取sql语句
                        cmd.CommandText = sql;//添加sql语句
                        cmd.ExecuteNonQuery();//执行
                    }
                    trans.Commit();//执行完成之后提交
                    return true;
                }
                catch(Exception e)
                {
                    //执行sql语句失败,事务回滚
                    trans.Rollback();
                    return false;
                }
                finally
                {
                    con.Close();
                }
            }
        }

在需要操作数据库的地方调用此方法:

private void transql_Click(object sender, EventArgs e)
        {
            List<string> lst = new List<string>();
            lst.Add("update Word_Book set book_word_CN='" + book_word_CN.Text.Trim() +
                "', book_word_JP='" + book_word_JP.Text.Trim() + "'where book_key='" + book_key.Text.Trim() + "'");
            lst.Add("update Word_Book set book_word_Roma='" + book_word_Roma.Text.Trim() +
               "', book_nominal='" + book_nominal.Text.Trim() + "'where book_key='" + book_key.Text.Trim() + "'");
            Boolean isOk= help.openTrans(lst);
            if (!isOk) MessageBox.Show("修改失败", "提示:");
            else MessageBox.Show("修改成功", "提示:");
        }


C#增删改查操作完成,想要方便可以自定义一个类,把所有的方法写在里面,当有用到的时候可以初始化该类的实例用来调用类里的方法,完工。

  • 33
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,我可以为您提供一个基本的DBhelper类,它可以连接到Oracle、SQL Server、MySQLSQLite数据库,并实现常见的增删改查功能、事务和存储过程的执行。以下是示例代码: ```csharp using System; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Data.SQLite; using System.Data.OracleClient; using MySql.Data.MySqlClient; public class DBHelper { private string connectionString; // 数据库连接字符串 private DbProviderFactory factory; // 数据库工厂对象 public DBHelper(string dbType, string connStr) { connectionString = connStr; // 根据数据库类型创建对应的数据库工厂对象 switch (dbType.ToLower()) { case "oracle": factory = DbProviderFactories.GetFactory("System.Data.OracleClient"); break; case "sqlserver": factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); break; case "mysql": factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient"); break; case "sqlite": factory = DbProviderFactories.GetFactory("System.Data.SQLite"); break; default: throw new Exception("不支持的数据库类型!"); } } // 执行查询,并返回查询结果的 DataTable 对象 public DataTable ExecuteQuery(string sql, CommandType cmdType, params DbParameter[] parameters) { using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = connectionString; conn.Open(); DbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = cmdType; if (parameters != null && parameters.Length > 0) { cmd.Parameters.AddRange(parameters); } DbDataAdapter adapter = factory.CreateDataAdapter(); adapter.SelectCommand = cmd; DataTable dt = new DataTable(); adapter.Fill(dt); return dt; } } // 执行非查询操作,返回受影响的行数 public int ExecuteNonQuery(string sql, CommandType cmdType, params DbParameter[] parameters) { using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = connectionString; conn.Open(); DbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = cmdType; if (parameters != null && parameters.Length > 0) { cmd.Parameters.AddRange(parameters); } int result = cmd.ExecuteNonQuery(); return result; } } // 执行查询,并返回查询结果的第一行第一列的值(Object类型) public object ExecuteScalar(string sql, CommandType cmdType, params DbParameter[] parameters) { using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = connectionString; conn.Open(); DbCommand cmd = conn.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = cmdType; if (parameters != null && parameters.Length > 0) { cmd.Parameters.AddRange(parameters); } object result = cmd.ExecuteScalar(); return result; } } // 开始一个事务 public DbTransaction BeginTransaction() { DbConnection conn = factory.CreateConnection(); conn.ConnectionString = connectionString; conn.Open(); DbTransaction trans = conn.BeginTransaction(); return trans; } // 提交一个事务 public void CommitTransaction(DbTransaction trans) { trans.Commit(); trans.Connection.Close(); } // 回滚一个事务 public void RollbackTransaction(DbTransaction trans) { trans.Rollback(); trans.Connection.Close(); } // 执行存储过程 public void ExecuteProcedure(string procName, CommandType cmdType, params DbParameter[] parameters) { using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = connectionString; conn.Open(); DbCommand cmd = conn.CreateCommand(); cmd.CommandText = procName; cmd.CommandType = cmdType; if (parameters != null && parameters.Length > 0) { cmd.Parameters.AddRange(parameters); } cmd.ExecuteNonQuery(); } } } ``` 使用示例: ```csharp // 创建一个连接 Oracle 数据库的 DBHelper 对象 DBHelper oracleHelper = new DBHelper("oracle", "Data Source=127.0.0.1:1521/orcl;User ID=scott;Password=tiger;"); // 执行查询,并返回查询结果的 DataTable 对象 DataTable dataTable = oracleHelper.ExecuteQuery("SELECT * FROM emp", CommandType.Text); // 执行非查询操作,返回受影响的行数 int result = oracleHelper.ExecuteNonQuery("UPDATE emp SET sal = sal * 1.1", CommandType.Text); // 执行查询,并返回查询结果的第一行第一列的值(Object类型) object value = oracleHelper.ExecuteScalar("SELECT COUNT(*) FROM emp", CommandType.Text); // 开始一个事务 DbTransaction trans = oracleHelper.BeginTransaction(); try { // 执行一些操作 // 提交事务 oracleHelper.CommitTransaction(trans); } catch (Exception ex) { // 回滚事务 oracleHelper.RollbackTransaction(trans); } // 执行存储过程 DbParameter[] parameters = new DbParameter[] { new OracleParameter("inParam", "value"), new OracleParameter("outParam", OracleType.VarChar, 50, ParameterDirection.Output, false, 0, 0, "", DataRowVersion.Default, null) }; oracleHelper.ExecuteProcedure("procName", CommandType.StoredProcedure, parameters); ``` 以上是一个简单的DBhelper类,您可以根据自己的需求进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值