C#如何使用数据库

  程序执行sql语句(包括单条sql,多条sql,存储过程,函数等等)大体有三个步骤:连接数据库,执行sql语句,返回结果。那么我们来看看c#是如何完成这三个步骤的。无论哪种数据库都是这三个步骤,那么就不按数据库分了,按照返回结果的类型来分类吧。

数据库连接用的字符串:

即下面代码的connstr

  1. "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="数据库路径";Persist Security Info=True;Jet OLEDB:Database Password="密码"  

1、  执行sql语句返回受影响的行数

(1)、一条sql语句

  1. public static int ExecuteNonQuery(string connStr, string sql)  
  2. {  
  3.     OleDbConnection conn = null;  
  4.     try  
  5.     {  
  6.         conn = new OleDbConnection(connStr);  
  7.         conn.Open();  
  8.         OleDbCommand command = new OleDbCommand(sql, conn);  
  9.         return command.ExecuteNonQuery();  
  10.     }  
  11.     catch  
  12.     {  
  13.         return 0;  
  14.     }  
  15.     finally  
  16.     {  
  17.         if (conn != null)  
  18.             conn.Close();  
  19.     }  
  20. }  

(2)、多条sql语句,返回受影响行数。由于多条sql为了保证数据库的正确性,最好使用事务方式运行。

  1. public static int ExecuteNonQuery(string connStr, List<string> sqlList)  
  2. {  
  3.     int executeCount = 0;  
  4.   
  5.     OleDbTransaction transaction = null;  
  6.   
  7.     OleDbConnection conn = null;  
  8.     try  
  9.     {  
  10.         conn = new OleDbConnection(connStr);  
  11.         conn.Open();  
  12.   
  13.         transaction = conn.BeginTransaction();  
  14.   
  15.         OleDbCommand command = new OleDbCommand();  
  16.   
  17.         command.Connection = conn;  
  18.   
  19.         command.Transaction = transaction;  
  20.   
  21.         for (int i = 0; i < sqlList.Count; i++)  
  22.         {  
  23.             command.CommandText = sqlList[i];  
  24.   
  25.             executeCount += command.ExecuteNonQuery();  
  26.         }  
  27.         transaction.Commit();  
  28.     }  
  29.     catch  
  30.     {  
  31.         if (transaction != null)  
  32.             transaction.Rollback();  
  33.         return 0;  
  34.     }  
  35.     finally  
  36.     {  
  37.         if (conn != null)  
  38.             conn.Close();  
  39.     }  
  40.     return executeCount;  
  41. }  

2、返回DataSet

  1. public static DataSet ExecuteQueryReturnDataSet(string connStr, string sql)  
  2. {  
  3.     OleDbConnection conn = null;  
  4.     DataSet ds = null;  
  5.     try  
  6.     {  
  7.         conn = new OleDbConnection(connStr);  
  8.         ds = new DataSet();  
  9.         conn.Open();  
  10.   
  11.         OleDbDataAdapter command = new OleDbDataAdapter(sql, conn);  
  12.         command.Fill(ds, "datasetName");  
  13.     }  
  14.     catch  
  15.     {  
  16.     }  
  17.     finally  
  18.     {  
  19.         if (conn != null)  
  20.             conn.Close();  
  21.     }  
  22.     return ds;  
  23. }  

3、返回OleDbDataReader

  1. public static OleDbDataReader ExecuteQueryReturnReader(string sql, string connStr)  
  2. {  
  3.     OleDbConnection conn = new OleDbConnection();  
  4.     OleDbDataReader reader = null;  
  5.   
  6.     try  
  7.     {  
  8.         conn = new OleDbConnection(connStr);  
  9.         conn.Open();  
  10.   
  11.         OleDbCommand command = conn.CreateCommand();  
  12.         command.CommandText = sql;  
  13.         reader = command.ExecuteReader();  
  14.     }  
  15.     catch  
  16.     {  
  17.     }  
  18.     finally  
  19.     {  
  20.         if (conn != null)  
  21.             conn.Close();  
  22.     }  
  23.     return reader;  
  24. }      

4、执行存储过程并返回受影响行数(以Oracle为例)

  1. public static int RunProcedure(string storedProcName, IDataParameter[] parameters)  
  2. {  
  3.     int result = 0;   
  4.     try  
  5.     {  
  6.         using (OracleConnection connection = new OracleConnection(GetConnectionString()))  
  7.         {  
  8.             connection.Open();  
  9.   
  10.             OracleCommand command = BuildQueryCommand(connection, storedProcName, parameters);  
  11.   
  12.             result = command.ExecuteNonQuery();  
  13.         }  
  14.     }  
  15.     catch (Exception e)  
  16.     {  
  17.   
  18.     }  
  19.   
  20.     return result;  
  21. }  
  22. private static OracleCommand BuildQueryCommand(OracleConnection connection, string storedProcName,  
  23.   
  24.     IDataParameter[] parameters)  
  25. {  
  26.     OracleCommand command = new OracleCommand(storedProcName, connection);  
  27.   
  28.     command.CommandType = CommandType.StoredProcedure;  
  29.   
  30.     foreach (OracleParameter parameter in parameters)  
  31.     {  
  32.         command.Parameters.Add(parameter);  
  33.     }  
  34.   
  35.     return command;  
  36. }    

5、带参数的sql语句

  1. public static int ExecuteNonQuery(string sql,string connStr, OleDbParameter[] commandParameters)  
  2. {  
  3.     int count = 0;  
  4.     OleDbCommand cmd = new OleDbCommand();  
  5.   
  6.     OleDbConnection conn = null;  
  7.     try  
  8.     {  
  9.         conn = new OleDbConnection(connStr);  
  10.         PrepareCommand(cmd, conn,sql, commandParameters);  
  11.         count = cmd.ExecuteNonQuery();  
  12.         cmd.Parameters.Clear();  
  13.     }  
  14.     catch  
  15.     {  
  16.     }  
  17.     finally  
  18.     {  
  19.   
  20.         if (conn != null)  
  21.         {  
  22.             conn.Close();  
  23.         }  
  24.     }  
  25.     return count;  
  26. }  
  27.   
  28. private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, string sql, OleDbParameter[] cmdParms)  
  29. {  
  30.     if (conn.State != ConnectionState.Open)  
  31.         conn.Open();  
  32.   
  33.     cmd.Connection = conn;  
  34.     cmd.CommandText = sql;  
  35.     cmd.CommandType = CommandType.Text;  
  36.   
  37.     if (cmdParms != null)  
  38.     {  
  39.         foreach (OleDbParameter parm in cmdParms)  
  40.             cmd.Parameters.Add(parm);  
  41.     }  
  42. }     

一般常用的就这么几种,数据库的几个重要对象分别是:OleDbCommand、OleDbConnection、OleDbDataReader、OleDbDataAdapter、DataSet。对于不同数据库,有几个对象需要对应相应数据库的对象。OleDbCommand、OleDbConnection、OleDbDataReader、OleDbDataAdapter,Oracle下OleDb换成Oracle,Sql Server下 则换成SQL。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值