Data Source表示数据源

  这是本人在学习ADP.NET过程中所作的笔记,可作为ADO.NET入门或者复习的教程。

  连接字符串:

  DataSource=localhost; AttchDBFilename=|DataDirectory|\Database1.mdf; InitialCatalog=UserDate; Integrated Security=True

  参数说明:

  Data Source表示数据源,其值为服务器地址和实例名,如果是正式版则不用加SQLEXPRESS,如果是免费版,必须加上SQLEXPRESS,即连接本机可以写成".\ SQLEXPRESS";

  AttchDBFilename表示附加数据库,其值为附加数据库的地址,DataDirectory代表当前项目目录下的App_data目录,是数据库的默认存储路径;

  Initial Catalog为数据库,其值为当前连接所要连接的数据库名称

  注:如果要使用Sqlconnection对象,必须导入System.Data.Sqlclient命名空间

  ADO.NET中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理。也可以使用try……catch语句块括起来,但是using是最简单的。

  代码语句:

  using (SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=UserDate;Integrated Security=True"))

  {

  程序语句块;

  }

  或者:

  SqlConnection cnn = new SqlConnection();//创建SqlConnection对象的一个实例 cnn.ConnectionString = "Data Source=localhost;Initial Catalog=UserDate;Integrated Security=True";

  cnn.Open();

  注:using的作用是及时的释放资源,在花括号结束的时候,程序会自动释放语句所申请的内存,以达到程序的最优。

  一、通过SqlCommand对象执行SQL语句

  SqlCommand对象可以执行SQL语句完成对数据库的增、删、改、查等数据操作。在SqlCommand类中,最主要的属性有CommandText,该属性用于接收要执行的SQL语句,例如cmd.CommandText = "INSERT INTOb1(name, company, position, shijian) VALUES(@Name, @Company, @Position,@Datetime)",除了CommandText属性,主要还有Connection属性,用来接收数据库连接,还有Transaction属性,用来接收事物。

  其还有三个比较常用的方法,第一个是ExecuteNonQuery()方法,主要用来提交无查询结果的SQL语句,如UPDATE,INSERT,DELETE等语句,其返回值为数据库中被SQL语句影响的行数,第二个是ExecuteReader()方法,主要用来提交SELECT语句,返回值是一个数据流,里面是SELECT语句的查询结果,可以用SqlDataReader对象来接收,然后调用其Read()方法来逐行读出查询结果。第三个是ExexuteScalar()方法,主要也是用来提交SELECT语句,但是其返回值是查询结果的第一行第一列,所以适用于例如COUNT等聚合查询。

  二、SQL注入与参数化查询

  SQL注入是通过特殊的SQL语句非法获取数据库的内容。为了保证系统不被黑客进行SQL注入攻击,在SqlCommand执行SQL语句时,可以对提交的数据先进行参数化处理,参数化处理主要是通过SqlCommand对象的Parameters属性的Add方法来完成,参数化处理有两种方法,第一种既是在"执行Insert操作"中提到的,还有另外一种代码如下:

  cmd.CommandText = "INSERT INTO b1(name, company, position, shijian) VALUES(@Name, @Company, @Position, @Datetime)";

  cmd.Parameters.Add(new SqlParameter("Name", Name.Text));

  cmd.Parameters.Add(new SqlParameter("Company", Company.Text));

  cmd.Parameters.Add(new SqlParameter("Position", Position.Text));

  cmd.Parameters.Add(new SqlParameter("Datetime", DateTime.Parse(Datetime.Text)));

  cmd.ExecuteNonQuery();

  注:以上的代码中需要注意一点,在第一种代码中,显示的对各个参数的数据进行了定义,但是在上面这种代码中,并未对参数进行数据定义,所以需要在提供数据时对数据进行适时的转换,例如"shijian"在数据库中定义为DateTime类型,但是其在文本框中获得的为string类型,所以需要调用DateTime的Parse方法对数据进行转换,如果数据库中的数据是int型,在赋值时也应进行相应的转换。

  三、执行Insert操作

  首先,需要申明一个SqlCommand对象;

  其次,用SqlConnection的CreateCommand()函数,创建一个SqlCommand对象,然后将所要执行的SQL语句赋值给SqlCommand的CommandText属性;

  最后,调用SqlCommand类的ExexuteNonQuery()方法,执行CommandText的SQL语句。

  代码语句:

  using(SqlCommand cmd = con.CreateComand())

  {

  cmd.CommandText = "INSERT INTO b1(name, company, position) VALUES("whh", "UVGE", "coder")";

  cmm.ExecuteNonQuery();

  }

  或者:

  using(SqlCommand cmd = con.CreateComand())

  {

  //设置SQL语句

  cmm.CommandText = "INSERT INTO b1(name, company, position, shijian) VALUES(@Name, @Company, @Position, @Datetime)";

  //创建参数,并定义其数据类型,要和数据库中对应的字段保持相同

  cmm.Parameters.Add("@Name", SqlDbType.NVarChar);

  cmm.Parameters.Add("@Company", SqlDbType.NVarChar);

  cmm.Parameters.Add("@Position", SqlDbType.NVarChar);

  cmm.Parameters.Add("@Datetime", SqlDbType.DateTime);

  //设置参数的值,这些值来自前段的输入信息

  cmm.Parameters["@Name"].Value = Name.Text;

  cmm.Parameters["@Company"].Value = Company.Text;

  cmm.Parameters["@Position"].Value = Position.Text;

  cmm.Parameters["@Datetime"].Value = Datetime.Text;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值