学习笔记(二)——数据库命令对象的应用

学习笔记(二)——数据库命令对象的应用

1. 创建Command对象都通过类似于下面的语句来实现:
xxxConnection conn = new xxxConnection("myString");
xxxCommand myCmd = new xxxCommand("select * from orders",conn);

2.设置连接和SQL相关命令

  SqlConnection sqlConnection = new SqlConnection();                   //声明并实例化SQL连接;

            sqlConnection.ConnectionString =                   "Server=(local);Database=xxx;Integrated Security=sspi"; //默认用Windows验证  

sqlConnection.Open();  

   sqlConnection.Close(); 

3.ADO.net 中的主要类:

Connection 负责连接到数据 负责找到数据,进行身份证验证,与数据建立起一个传数据的通道

Command 负责操作纵数据库 向数据发送 sql 让数据执行;

DataReader 负责快速只进的读取数据 一行一行的读取数据;

举例:如果访问 sqlserver 数据库,SqlConnection SqlCommand…..

连接数据库的对象: 连接到数据的步骤

SqlConnection:

第一步: SqlConnection conn = new SqlConnection(连接字符串);

第二步: 调用 Open() 连接到数据库

第三步: 调用 conn.Close();断开与数据库的连接

 操作数据库:

第一步: SqlCommand cmd = new SqlCommand(sql, conn);

cmd.Connection属性:设置连接对象

cmd.CommandText属性:要执行的 sql语句

例如:

 //SqlCommand cmd = new SqlCommand();

 //cmd.Connection = conn; //设置连接对象,这样command

就知道要操作哪一个数据库了

 //cmd.CommandText = string.Format("insert into class

values('{0}','{1}')",

 // textBox1.Text, textBox2.Text);

第二步:int i = cmd.ExecuteNonQuery();//用于执行一个没有返回值(insert

update delete)的sql语句,

//这个方法的返回值是受影响的行数

第 一 个 重 要 方法:cmd.ExecuteNonQuery()

上面的方法,无法得到数据库中的值,要想得到数据库中的值怎么办?

第二个重要方法 的方法:

ExecuteScalar 执行一个 sql语句(一般是 select语句)并且返回第一行第

一列的值,由于没有办法确定第一行第一列的数据类型,所以他的返回值类型

为: object

4.执行命令

建立了数据源的连接和设置了命令之后,Command对象执行SQL命令有三种方法:ExecuteNonQuery、ExecuteReader和ExecuteScalar。
ExecuteNonQuery:不会返回结果集,只会返回语句影响的记录行数,它适合执行插入、更新、删除之类不返回结果集的命令

ExecuteReader:使用ExecuteReader方法执行的命令,可以返回一个类型化的DataReader实例或者IDataReader接口的结果集。

ExecuteScalar:调用SQL命令的方法ExecuteScalar来执行命令,并接受单个结果(即标量)

5.数据库访问公共类 DBHelper.cs

把连接字符串写到配置文件中:

第一步:创建一个应用程序配置文件 (app.config 项目中叫,生成后叫 应用程序名.config)

第二步: 

第三步:在应用程序中读取连接字符串

右击解决方案中的”引用:->添加引用

static string connString =

System.Configuration.ConfigurationManager.ConnectionStrings["ConnStri

ng"].ConnectionString;

6.数据库加密(哈希算法)

插入数据values( “3050507001”,HASHBYTES (‘MD5’, ‘7001’)

访问数据库获取账号密码:

sqlCommand.CommandText =                                                                   "SELECT COUNT(1) FROM tb_User"

                + " WHERE No='" + this.txb_UserNo.Text.Trim() + "'"                         //将文本框的文本清除首尾的空格后,拼接至命令文本中;

                + " AND Password=HASHBYTES('MD5','" + this.txb_Password.Text.Trim() + "');";         

容易产生注入式攻击(’)or 1=1;--)出现错误

解决办法(参数):

sqlCommand.CommandText =

                "INSERT tb_User (No,Password) VALUES(@No,HASHBYTES('MD5',@Password));";                 //指定SQL命令的命令文本;命令文本包含参数;

            sqlCommand.Parameters.AddWithValue("@No", this.txb_UserNo.Text.Trim());                     //向SQL命令的参数集合添加参数的名称、值;

            sqlCommand.Parameters.AddWithValue("@Password", this.txb_Password.Text.Trim());

            sqlCommand.Parameters["@Password"].SqlDbType = SqlDbType.VarChar;                           //将密码参数的类型设为变长字符串;

 

 

 

 7.异常错误

错误提示:

解决办法:

try                                                                                                     {

                sqlConnection.Open();                                                                  

                rowAffected = sqlCommand.ExecuteNonQuery();                                        //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;

            }

            catch (SqlException sqlEx)                                                                  //捕捉SQL异常;

            {

                if (sqlEx.Number == 2627)                                                               //若SQL异常编号为2627,则违反主键/唯一约束,即插入重复值;

                {

                    message = "您注册的用户号已存在,请重新输入!";                                  //给出合适的错误提示;

                }

                else                                                                                   

                {

                    message = "注册失败!";                                                             //给出一般错误提示;

                }

            }

            finally                                                                                                 {

                sqlConnection.Close();                                                                 

            }

            if (rowAffected == 1)                                                                       //若成功写入1行记录;

            {

                message = "注册成功。";                                                                 //给出正确提示;

            }

            MessageBox.Show(message);                                                                  

        }

    }

 

转载于:https://www.cnblogs.com/Angular-JS/p/7563300.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值