本工作室主要是写一些技术文章和心得,如有问题,可联系本工作室。

微信:15312167779
QQ:149824844

vb.NET连接数据库及基本增删改查

 

一、.net 连接数据库

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

  <appSettings>

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

  </appSettings>

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

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

  <appSettings>

    <add key="connstring" value="DataSource=.;Initial Catalog=dataset;Integrated Security=True"/>

  </appSettings>

其中,dataset 为数据库名。

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

String constr =ConfigurationManager.AppSettings["connstring"].ToString();         

SqlConnectionmyconn = new SqlConnection(constr);

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

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

String constr = "Data Source=.;Initial Catalog=dataset;IntegratedSecurity=True";

SqlConnectionmyconn = new SqlConnection(constr);

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

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

String constr = "Data Source=.;InitialCatalog=dataset;Integrated Security=True";

SqlConnectionmyconn = new SqlConnection(constr);

myconn.Open();

//相关数据库操作

myconn.Close();

Open 就是打开数据库,Close 就是关闭数据库。

二、.net 操作数据库

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


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

 

String constr = "Data Source=.;InitialCatalog=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>";

 

            }

增删改的话就得用到 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("<scriptlanguage='javascript'>alert('添加失败!')</script>");

            }

           myconn.Close(); 

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

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

myconn.Open();

            SqlCommand cmd =myconn.CreateCommand();

            cmd.CommandText = "insert into customvalues(@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("<scriptlanguage='javascript'>alert('增加成功!')</script>");

            }

            else

            {

                this.Response.Write("<scriptlanguage='javascript'>alert('添加失败!')</script>");

            }

            myconn.Close();

            ShowAll();

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

1.使用 Connection 对象的 CreateCommand 方法创建了一个SqlCommand 对象。

            SqlCommand cmd =myconn.CreateCommand();

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

            cmd.CommandText = "insert into customvalues(@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);


微信:15312167779(系统交流学习)

邮箱:149824844@qq.com

更多我的学习技术文章:

https://boysky123.lofter.com

https://user.qzone.qq.com/149824844


评论

© JC网络工作室 | Powered by LOFTER