zoukankan      html  css  js  c++  java
  • ADO.Net之初入江湖

    // Use Easy5DB;
    // CREATE TABLE tb_SelCustomer
    //(
    //   ID INT IDENTITY(1,1) PRIMARY KEY, /*ID,主键*/
    //   Name varchar(20) NOT NULL, /*姓名*/
    //   Sex char(1) default('0'), /*性别:0为男,1为女,默认为0*/
    //   CustomerType char(1) default('0'), /*客户类型:0为普通用户,1为VIP用户,默认为0*/
    //   Phone varchar(12), /*联系电话*/
    //   Email varchar(50), /*电子邮件*/
    //   ContactAddress varchar(200), /*联系地址*/
    //   Lat float, /*所在位置维度,用于在地图显示*/
    //   Lng float, /*所在位置经度,用于在地图显示*/
    //   Postalcode varchar(10), /*邮政编码*/
    //   Remark varchar(50) /*备注*/
    //)
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.Data.SqlClient;
    using System.Data;

    namespace StartUp
    {
        class Program
        {
            static void Main(string[] args)
            {
                //TestExecuteNonQuery();
                //TestExecuteExcuteReader();
                //TestExecuteScalar();
                //TestBeginExecuteNonQuery();
                //TestSqlParamterExecuteNonQuery("测试客户1", "123456789123", "Test@163.com", "中国深圳南山区");
                TestExecuteScalarForGetInsertRowId();
            }

            #region Command 对象的普通操作

            private static void TestExecuteNonQuery()
            {
                string connStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=Easy5DB;User ID=sa;Password=123456";
                using (SqlConnection connection = new SqlConnection(connStr))
                {
                    try
                    {
                        connection.Open();

                        using (SqlCommand command = new SqlCommand())
                        {
                            StringBuilder strSQL = new StringBuilder(); strSQL.Append("insert into tb_SelCustomer "); strSQL.Append("values("); strSQL.Append("'liuhao','0','0','13822223333','liuhaorain@163.com','广东省深圳市宝安区',12.234556,34.222234,'422900','备注信息')");

                            command.Connection = connection;
                            command.CommandType = CommandType.Text;
                            command.CommandText = strSQL.ToString();

                            try
                            {
                                int rows = command.ExecuteNonQuery();
                                Console.WriteLine("影响行数:{0}", rows);
                                Console.ReadKey();
                            }
                            catch (Exception)
                            {
                                Console.WriteLine("执行命令失败");
                                Console.ReadKey();
                            }
                        }

                    }
                    catch (Exception)
                    {
                        Console.WriteLine("打开数据库失败");
                        Console.ReadKey();
                    }
                }
            }

            /// <summary>
            /// SqlDataReader sqlDataReader = command.ExecuteReader();基于连接
            /// for (int i = 0; i < sqlDataReader.FieldCount; i++)
            ///{
            ///    Console.WriteLine("{0}:{1}", sqlDataReader.GetName(i), sqlDataReader.GetValue(i));
            ///}
            ///
            ///看到用SqlDataReader不符合快速开发应用程序(RAD),
            ///完美的解决方案是用SqlDataAdapter
            /// </summary>
            private static void TestExecuteExcuteReader()
            {
                string connStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=Easy5DB;User ID=sa;Password=123456";
                using (SqlConnection connection = new SqlConnection(connStr))
                {
                    try
                    {
                        connection.Open();

                        using (SqlCommand command = new SqlCommand())
                        {
                            StringBuilder strSQL = new StringBuilder();
                            strSQL.Append("select * from tb_SelCustomer");

                            command.Connection = connection;
                            command.CommandType = CommandType.Text;
                            command.CommandText = strSQL.ToString();

                            try
                            {
                                SqlDataReader sqlDataReader = command.ExecuteReader();
                                while (sqlDataReader.Read())
                                {
                                    for (int i = 0; i < sqlDataReader.FieldCount; i++)
                                    {
                                        Console.WriteLine("{0}:{1}", sqlDataReader.GetName(i), sqlDataReader.GetValue(i));
                                    }

                                    Console.WriteLine("----------------------------");
                                }


                                Console.ReadKey();
                            }
                            catch (Exception)
                            {
                                Console.WriteLine("执行命令失败");
                                Console.ReadKey();
                            }
                        }

                    }
                    catch (Exception)
                    {
                        Console.WriteLine("打开数据库失败");
                        Console.ReadKey();
                    }
                }
            }

            private static void TestExecuteScalar()
            {
                string connStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=Easy5DB;User ID=sa;Password=123456";
                using (SqlConnection connection = new SqlConnection(connStr))
                {
                    try
                    {
                        connection.Open();

                        using (SqlCommand command = new SqlCommand())
                        {
                            StringBuilder strSQL = new StringBuilder();
                            strSQL.Append("Select count(*) from tb_SelCustomer ");

                            command.Connection = connection;
                            command.CommandType = CommandType.Text;
                            command.CommandText = strSQL.ToString();

                            try
                            {
                                int rows = (int)command.ExecuteScalar();
                                Console.WriteLine("执行ExcuteScalar方法:共{0}行记录", rows);
                                Console.ReadKey();
                            }
                            catch (Exception)
                            {
                                Console.WriteLine("执行命令失败");
                                Console.ReadKey();
                            }
                        }

                    }
                    catch (Exception)
                    {
                        Console.WriteLine("打开数据库失败");
                        Console.ReadKey();
                    }
                }
            }

            #endregion

            #region Command对象的异步操作

            private static void TestBeginExecuteNonQuery()
            {
                string connStr = @"Data Source=.\SQLEXPRESS;" +
                                   "Initial Catalog=Easy5DB;" +
                                   "User ID=sa;Password=123456;" +
                                   "Asynchronous Processing=true"; //必须开启SqlConnection的异步查询
               
                using (SqlConnection connection = new SqlConnection(connStr))
                {
                    try
                    {
                        connection.Open();

                        using (SqlCommand command = new SqlCommand())
                        {
                            StringBuilder strSQL = new StringBuilder();
                            //插入测试客户
                            for (int i = 1; i <= 10; ++i)
                            {
                                strSQL.Append("insert into tb_SelCustomer ");
                                strSQL.Append("values('");
                                string name = "测试客户" + i.ToString();
                                strSQL.Append(name);
                                strSQL.Append("','0','0','13822223333','liuhaorain@163.com','广东省深圳市宝安区',12.234556,34.222234,'422900','备注信息'); ");
                            }

                            command.Connection = connection;
                            command.CommandType = CommandType.Text;
                            command.CommandText = strSQL.ToString();

                            try
                            {
                                double time = 0.0;
                                IAsyncResult iar = command.BeginExecuteNonQuery();

                                //插入没有完成,在可以别的事情
                                while (!iar.IsCompleted)
                                {
                                    System.Threading.Thread.Sleep(1);
                                    ++time;
                                    Console.WriteLine("已经插入{0}个", time);
                                }
                               
                                Console.WriteLine("完成", time);
                                Console.ReadKey();

                                command.EndExecuteNonQuery(iar);
                            }
                            catch (Exception)
                            {
                                Console.WriteLine("执行命令失败");
                                Console.ReadKey();
                            }
                        }

                    }
                    catch (Exception)
                    {
                        Console.WriteLine("打开数据库失败");
                        Console.ReadKey();
                    }
                }
            }

            #endregion

            /// <summary>
            /// 使用参数化查询
            /// </summary>
            /// <param name="name"></param>
            /// <param name="phone"></param>
            /// <param name="email"></param>
            /// <param name="address"></param>
            private static void TestSqlParamterExecuteNonQuery(string name,
                string phone,
                string email,
                string address)
            {
                string connStr = @"Data Source=.\SQLEXPRESS;Initial Catalog=Easy5DB;User ID=sa;Password=123456";
                using (SqlConnection connection = new SqlConnection(connStr))
                {
                    try
                    {
                        connection.Open();

                        using (SqlCommand command = new SqlCommand())
                        {
                            //参数化,避免SQL注入攻击
                            SqlParameter[] parameters = new SqlParameter[]
                            {
                                new SqlParameter("@Phone", SqlDbType.VarChar, 12),
                                new SqlParameter("@Email", SqlDbType.VarChar, 50),
                                new SqlParameter("@Address", SqlDbType.VarChar, 200),
                                new SqlParameter("@Name", SqlDbType.VarChar, 20),
                            };

                            parameters[0].Value = phone;
                            parameters[1].Value = email;
                            parameters[2].Value = address;
                            parameters[3].Value = name;

                            foreach (var item in parameters)
                            {
                                command.Parameters.Add(item);
                            }

                            StringBuilder strSQL = new StringBuilder();
                            strSQL.Append("Update tb_SelCustomer Set ");
                            strSQL.Append("Phone = @Phone,");
                            strSQL.Append("Email = @Email,");
                            strSQL.Append("ContactAddress = @Address ");
                            strSQL.Append("where Name = @Name;");

                            command.Connection = connection;
                            command.CommandType = CommandType.Text;
                            command.CommandText = strSQL.ToString();

                            try
                            {
                                int rows = command.ExecuteNonQuery();
                                Console.WriteLine("影响行数:{0}", rows);
                                Console.ReadKey();
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("执行命令失败:" + e.Message);
                                Console.ReadKey();
                            }
                        }

                    }
                    catch (Exception)
                    {
                        Console.WriteLine("打开数据库失败");
                        Console.ReadKey();
                    }
                }
            }

            /// <summary>
            /// 用SQL Server数据库原生的OUTPUT关键字。
            ///
            /// OUTPUT关键字返回INSERT操作的一个字段(一般是主键ID)。
            ///
            /// 因此我们只要结合OUTPUT关键字以及ExecuteScalar方法,
            /// 就很容易得到插入行的主键。
            /// </summary>
            private static void TestExecuteScalarForGetInsertRowId()
            {
                string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=Easy5DB;User ID=sa;Password=123456";
                //string connectionString = @"Data Source=127.0.0.1;Initial Catalog=Easy5DB;User ID=sa;Password=123456";
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    try
                    {
                        connection.Open();

                        using (SqlCommand command = new SqlCommand())
                        {
                            StringBuilder strSql = new StringBuilder();
                            strSql.Append("insert tb_SelCustomer(Name)");
                            strSql.Append("OUTPUT inserted.ID values(@Name)");

                            command.Connection = connection;
                            command.CommandType = CommandType.Text;
                            command.CommandText = strSql.ToString();

                            SqlParameter parmName = new SqlParameter("@Name", SqlDbType.VarChar, 20);
                            parmName.Value = "人才";
                            command.Parameters.Add(parmName);

                            try
                            {
                                int inserteId = (int)command.ExecuteScalar();
                                Console.WriteLine("InsetID:{0}", inserteId);
                                Console.ReadKey();
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("执行命令失败:"+ e.Message);
                                Console.ReadKey();
                            }

                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("打开数据库失败:"+ e.Message);
                    }
                }
            }

            #region DataAdapter 和 DataSet
            /*1.DataAdapter:基于连接的
             * 它为外部数据源与本地DataSet集合架起了一座坚实的桥梁,
             * 将从外部数据源检索到的数据合理正确的调配到本地的DataSet集合中。
             *
             * •表或列名映射:维护本地DataSet表名和列名与外部数据源表名与列名的映射关系。
             * (不想SqlDataReader那样人工映射)

             *
             * 2.DataSet:基于非连接的
             * DataSet是基于非连接的(不需要连接数据库)
             */

            

            #endregion
        }
    }

  • 相关阅读:
    Spring
    JavaWeb
    JDBC
    MYSQL
    IDEA个人常用快捷键
    Web前端-JAVASCRIPT
    Web前端-HTML
    注解与反射
    多线程
    区块链 ATS多策略量化机器人简介
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/2961887.html
Copyright © 2011-2022 走看看