.NET连接数据库及主干增删改查

三、.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
方法,执行查询语句,并重回一个Data里德r 对象。

            SqlDataReader dataReader = cmd.ExecuteReader();

再再然后,就是将 Data里德(Reade)r
对象中的数据(也就是大家查询的多少)读取出来了

            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 对象的 Execute里德r 方法来操作,那么增删改吗?

增删改的话就得用到 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);

哦这样一改看起来就很舒畅了^_^

 

修改、删除和扩充的套路是大半的。这里就不贴代码了。

 

 一、写在眼前

因为这学期选修的 .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 就是关闭数据库。

相关文章