欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET连接数据库以及基本的增删改查操作教程

程序员文章站 2022-04-29 12:09:53
一、前言 因为这学期选修的 .net 课程就要上机考试了,所以总结下.net 操作 sqlserver 数据的方法。(因为本人方向是 java,所以对.net 的了解不多...

一、前言

因为这学期选修的 .net 课程就要上机考试了,所以总结下.net 操作 sqlserver 数据的方法。(因为本人方向是 java,所以对.net 的了解不多,但以下所写代码均是经过测试成功的),下面话不多说了,来一起看看详细的介绍吧。

二、.net 连接数据库

 在web.config文件中配置数据库连接,代码写在<configuration></configuration>

 <appsettings>
 <add key="connstring" value="user id=sa; password=sa123456; database=dataset; server=(local)" />
 </appsettings>

其中 sa  为 sqlserver 数据库账号,sa123456 为数据库账号密码,dataset 位数据库名。

通过上面的代码大家不难看出这是通过sqlserver数据库的账号连接的。那么如果需要通过windows身份认证连接呢?

 <appsettings>
 <add key="connstring" value="data source=.;initial catalog=dataset;integrated security=true"/>
 </appsettings>

其中,dataset 为数据库名。

配置好了之后,再在cs后台文件中使用 connection 对象连接

string constr = configurationmanager.appsettings["connstring"].tostring();  
sqlconnection myconn = new sqlconnection(constr);

很明显,第一个句获取我们在 web.config 中配置的数据库的信息的字符串,然后 new 一个 sqlconnection 对象。

这个时候也许你会想,既然是获取配置文件中的字符串,那么可不可以直接在cs后台文件中写而不需要再配置文件中配置后再获取呢?答案是肯定的。

string constr = "data source=.;initial catalog=dataset;integrated security=true";
sqlconnection myconn = new sqlconnection(constr);

仔细对比下先前写的配置文件,就知道这两种方式的相同点了。

那么现在简单说下 connection 对象是个什么。在 ado.net 中 connection 对象的主要用途是打开和关闭数据库的连接,通过这个对象,可以对数据库进行访问和操作。

string constr = "data source=.;initial catalog=dataset;integrated security=true";
sqlconnection myconn = new sqlconnection(constr);
myconn.open();
//相关数据库操作
myconn.close();

open 就是打开数据库,close 就是关闭数据库。

三、.net 操作数据库

那么通过 connection 对象打开数据库后怎么对数据库操作呢?在 dao.net 中提供了command 对象,主要就是用来对数据库进行增、删、改、查的操作。

下面我们直接看个查找操作的例子:

string constr = "data source=.;initial catalog=dataset;integrated security=true";
   sqlconnection myconn = new sqlconnection(constr);
   myconn.open();
   string sql = "select * from custom ";
   sqlcommand cmd = new sqlcommand(sql, sqlconnection);
   sqldatareader datareader = cmd.executereader();
   show.text = "<tr><td>学号</td><td>姓名</td><td>学院</td><td>年龄</td><td>昵称</td></tr>";
   while (datareader.read())
   {
    show.text = show.text + "<tr><td>" + datareader[0].tostring()
     + "</td><td>" + datareader[1].tostring()
     + "</td><td>" + datareader[2].tostring()
     + "</td><td>" + datareader[3].tostring()
     + "</td><td>" + datareader[4].tostring() + "</td></tr>";

   }
   sqlconnection.close();

通过上面这段代码,不难发现,在开启connection对象后,首先我们需要写一段查询的sql语句:

   string sql = "select * from custom ";

然后,new 一个sqlcommand对象,参数是 sql 语句 和 connection 对象 。

   sqlcommand cmd = new sqlcommand(sql, sqlconnection);

再然后,我们通过 sqlcommand 对象的 executereader 方法,执行查询语句,并返回一个datareader 对象。

   sqldatareader datareader = cmd.executereader();

再再然后,就是将 datareader 对象中的数据(也就是我们查询的数据)读取出来了

while (datareader.read())
   {
    show.text = show.text + "<tr><td>" + datareader[0].tostring()
     + "</td><td>" + datareader[1].tostring()
     + "</td><td>" + datareader[2].tostring()
     + "</td><td>" + datareader[3].tostring()
     + "</td><td>" + datareader[4].tostring() + "</td></tr>";

   }

最后,当然是关闭我们的 connection 对象了。

   sqlconnection.close();

查询操作是通过 command 对象的 executereader 方法来操作,那么增删改呢?

增删改的话就得用到 command 对象的 executenonquery 方法了。这个方法返回的是受影响的行数,也就是说如果操作失败,返回的是0。

还是看个增加数据的例子吧:

myconn.open();
   string sql = "insert into custom values('" + uid.text + "','" + uname.text + "','" + udepart.text
    + "'," + uage.text + ",'" + uename.text + "','" + upassword.text + "')";
   sqlcommand cmd = new sqlcommand(sql, myconn);
   if (cmd.executenonquery() > 0)
   {
    this.response.write("<script language='javascript'>alert('增加成功!')</script>");
   }
   else
   {
    this.response.write("<script language='javascript'>alert('添加失败!')</script>");
   }
   myconn.close();

通过上面代码,不难发现,其实套路和我们写的查询差不多,就是sql语句不同和调用的command对象不同而已。

但是,仔细看会发现这段代码是使用了 sql 语句拼接的。这种方式写起来比较乱(又是双引号又是单引号的),还有可能被 sql 注入。这个时候就会想,能不能有占位符呢?答案是肯定的。

myconn.open();
   sqlcommand cmd = myconn.createcommand();
   cmd.commandtext = "insert into custom values(@uid,@uname,@udepart,@uage,@uename,@upassword)";
   cmd.parameters.addwithvalue("@uid", uid.text);
   cmd.parameters.addwithvalue("@uname", uname.text);
   cmd.parameters.addwithvalue("@udepart", udepart.text);
   cmd.parameters.addwithvalue("@uage", uage.text);
   cmd.parameters.addwithvalue("@uename", uename.text);
   cmd.parameters.addwithvalue("@upassword", upassword.text);
   if (cmd.executenonquery() > 0)
   {
    this.response.write("<script language='javascript'>alert('增加成功!')</script>");
   }
   else
   {
    this.response.write("<script language='javascript'>alert('添加失败!')</script>");
   }
   myconn.close();
   showall();

这段代码与之前代码的不同之处在于:

1.使用 connection 对象的 createcommand 方法创建了一个sqlcommand 对象。

   sqlcommand cmd = myconn.createcommand();

2.使用了command 对象的 commandtext 属性写 sql 语句文本,当然也可以是存储过程的名称。

   cmd.commandtext = "insert into custom values(@uid,@uname,@udepart,@uage,@uename,@upassword)";

3.使用了command 对象的 parameters 属性 输入参数。

cmd.parameters.addwithvalue("@uid", uid.text);
   cmd.parameters.addwithvalue("@uname", uname.text);
   cmd.parameters.addwithvalue("@udepart", udepart.text);
   cmd.parameters.addwithvalue("@uage", uage.text);
   cmd.parameters.addwithvalue("@uename", uename.text);
   cmd.parameters.addwithvalue("@upassword", upassword.text);

嗯这样一改看起来就很舒服了^_^

修改、删除和增加的套路是差不多的。这里就不贴代码了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。