• ADO.NET学习


    1. ADO.NET重要的类
    2. 在.NET访问MySql数据库时的几点经验!
      string connstr=Setting.Instance().GetConnectionString("MySql");
      MySqlConnection conn =new MySqlConnection(connstr);
      conn.Open();
      string query = "insert into myfirst(Id,Name) values(?Id,?Name)";
      MySqlCommand cmd = new MySqlCommand(query, conn);
      MySqlParameter para1=new MySqlParameter("?Id",DbType.Int32); //这里要注意必须要用?号
      MySqlParameter para2=new MySqlParameter("?Name",DbType.String);//这里要注意必须要用?号
      para1.Value=5;
      para2.Value="ddd";
      cmd.Parameters.Add(para1);
      cmd.Parameters.Add(para2);
      cmd.ExecuteNonQuery();
    3. 设计应用程序时,要考虑应用程序所需功能的等级,以确定使用 DataSet 或者是 DataReader
      对于下列情况,要在应用程序中使用 DataReader:
      
      •    
      不需要缓存数据。
      
      •    
      要处理的结果集太大,内存中放不下。
      
      •    
      一旦需要以只进、只读方式快速访问数据。
    4. 用多个表填充 DataSet,创建一个 DataTableMapping,把 "Customers1" 映射到 "Orders",并为其他后面的表创建其他的表映射。例如:
      //C#
      SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers; SELECT * FROM Orders;", myConnection);
      da.TableMappings.Add("Customers1", "Orders");
      DataSet ds = new DataSet();
      da.Fill(ds, "Customers");
    5. ExecuteScalar 和 ExecuteNonQuery/ExecuteReader
    1. 如果想返回像 Count(*)、Sum(Price) 或 Avg(Quantity) 的结果那样的单值,可以使用 Command.ExecuteScalar。ExecuteScalar 返回第一行第一列的值,将结果集作为标量值返回。(特别适合聚合函数,它的返回值是OBJECT[无法知道返回的第一行第一列是什么值])
    2. 使用不返回行的 SQL 语句时,例如修改数据(例如INSERT、UPDATE 或 DELETE)或仅返回输出参数或返回值,请使用 ExecuteNonQuery。只能接受受影响的行数,如果没有操作就返回-1.
    3. ExecuteReader:返回一个SqlDataReader对象。这个对象可以只读只进读取对象,reader方法判断有没有下一行
    1. 把 Null 作为参数值传递

      对数据库的命令中,当把空值作为参数值发送时,不能使用 null。而需要使用 DBNull.Value。例如:

      //C#
      SqlParameter param = new SqlParameter("@Name", SqlDbType.NVarChar, 20);
      param.Value = DBNull.Value;
    2. 当执行事务时,显式地在开始事务之前打开连接,并在提交之后关闭连接。例如:

      //C#
      public void RunSqlTransaction(SqlDataAdapter da, SqlConnection myConnection, DataSet ds)
      {
        myConnection.Open();
        SqlTransaction myTrans = myConnection.BeginTransaction();
        myCommand.Transaction = myTrans;
      
        try
        {
          da.Update(ds);
          myCommand.Transaction.Commit();
          Console.WriteLine("Update successful.");
        }
        catch(Exception e)
        {
          try
          {
            myTrans.Rollback();
          }
          catch (SqlException ex)
          {
            if (myTrans.Connection != null)
            {
              Console.WriteLine("An exception of type " + ex.GetType() +
                                " was encountered while attempting to roll back the transaction.");
            }
          }
      
          Console.WriteLine(e.ToString());
          Console.WriteLine("Update failed.");
        }
        myConnection.Close();
      }
    3. 在 C# 中使用 "Using" 语句

      对于 C# 程序员来说,确保始终关闭 Connection 和 DataReader 对象的一个方便的方法就是使用 using 语句。using 语句在离开自己的作用范围时,会自动调用被“使用”的对象的 Dispose。例如:

      //C#
      string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
      
      using (SqlConnection conn = new SqlConnection(connString))
      {
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
        
        conn.Open();
      
        using (SqlDataReader dr = cmd.ExecuteReader())
        {
          while (dr.Read())
            Console.WriteLine("{0}	{1}", dr.GetString(0), dr.GetString(1));
        }
      }
    4.  下边的代码是使用MySQL Connector Net 的例子。注意:他的Parameter的前缀是“?”而不是“@”。这个问题比较特殊。CoreLab里面的Parameter的前缀就是“@”.
      string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false;port=3308", "localhost", "root", "", "test");
                  try
                  {
                      MySqlConnection myConn = new MySqlConnection(connStr);
                      myConn.Open();
                      MySqlCommand cmd = myConn.CreateCommand();
                      
                      cmd.Parameters.Add("?DocName", MySqlDbType.VarChar, 50);
                      cmd.Parameters[0].Value = "test by code";
                      cmd.Parameters[0].SourceColumn = "DocName";
                      cmd.CommandText = "update t_docs set DocName=?DocName where DocId=4";
                      cmd.ExecuteNonQuery();
    5. 知识经验分享来源

  • 相关阅读:
    边缘提取二—实例 行远
    Exp2后门原理与实践
    Exp3免杀原理
    PostgreSQL 查询被锁阻塞的连接
    PostgreSQL中的数组与Any
    [Contest on 2022.4.12] 我又来水博客了
    2022 省选游记
    [省选联考 2020 A 卷] 组合数问题
    [学习笔记] 斯特林数
    LOJ 6515 「雅礼集训 2018 Day10」贪玩蓝月
  • 原文地址:https://www.cnblogs.com/step-city/p/5822967.html
Copyright © 2020-2023  润新知