视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
.NET连接数据库以及基本的增删改查操作教程
2020-11-27 22:35:08 责编:小采
文档

一、前言

因为这学期选修的 .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);

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

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

总结

下载本文
显示全文
专题