ado.net更新数据库

如何通过GridView向数据库提交数据?

1.在GridView 中如何插入其他类型控件时,通过<Itemtemplate>插入TextBox服务器控件

<asp:TemplateField HeaderText="平时成绩" SortExpression="Usual">
                    <ItemTemplate>
                        <asp:TextBox ID="TextUsual" runat="server" Width="60px" ></asp:TextBox>
                    </ItemTemplate>

             <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

  <asp:TemplateField HeaderText="期末成绩" SortExpression="Final">
                    <ItemTemplate >
                        <asp:TextBox ID="TextFinal" runat="server" Width="60px"></asp:TextBox>
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Center" />
                </asp:TemplateField>

            <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

 

 

<asp:TemplateField HeaderText="" SortExpression="Score">
                    <ItemTemplate>
                        <asp:TextBox ID="TextScore" runat="server" Width="60px" ></asp:TextBox>
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

 

 ado.net更新数据库

2.但是在向数据库提交数据的时候如何拿到每一个部分的值呢??

(1).通过一个循环将数据全部读入

foreach(GridViewRow gvr in this.GridView1.Rows)
{
  tUsual=gvr.FindControl("TextUsual") as TextBox;
  tFinal=gvr.FindControl("TextFinal") as TextBox;
  tScore=gvr.FindControl("TextScore") as TextBox;
}

 

(2)通过GridView行与列的属性读入数据

for (int i = 0; i < this.GridView1.Rows.Count; i++)
        {
            string stuNo = this.GridView1.Rows[i].Cells[0].Text; //拿到第i行,第1列的数据
            string stuCno = this.GridView1.Rows[i].Cells[2].Text;//拿到第i行,第二列的数据
            TextBox tb1 = (TextBox)GridView1.Rows[i].Cells[3].FindControl("TextUsual");
            string strUsual = tb1.Text;
            int intUsual = int.Parse(strUsual);
            TextBox tb2 = (TextBox)GridView1.Rows[i].Cells[4].FindControl("TextFinal");
            string strFinal = tb2.Text;
            int intFinal = int.Parse(strFinal);
            //拿到总和的分数
            string strScore = (int.Parse(strUsual) + int.Parse(strFinal)).ToString();int intScore = int.Parse(strScore);
    }

 

 

3.此时已经拿到GridView中每一部分的值,接下来可以通过数据库连接访问数据库,并修改更新数据库。下面是封装的数据库操作的类(面向SQLServer数据库)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Data;
using System.Data.SqlClient;

/// <summary>
///DB 的摘要说明
/// </summary>
public class DB
{
    private SqlConnection conn = null;
    private string strConn;
    private SqlTransaction tran;
    public DB()
    {
        //      
        //TODO: 在此处添加构造函数逻辑
        //
        //连接数据库
        strConn = WebConfigurationManager.ConnectionStrings["DataBase"].ConnectionString;

    }
    /// <summary>
    /// 打开数据库
    /// </summary>
    public void open()
    {
        if (conn == null)
        {
            conn = new SqlConnection(strConn);
        }
        if (conn.State.Equals(ConnectionState.Closed))
        {
            conn.Open();
        }
    }
    /// <summary>
    /// 关闭数据库
    /// </summary>
    public void close()
    {
        //如果为空,说明数据库关闭成功
        if (conn == null)
        {
            return;
        }
        if (conn.State.Equals(ConnectionState.Open))
        {
            conn.Close();
            
            conn.Dispose();
            conn = null;
        }
        else
        {
            conn.Dispose();
            conn = null;
        }
    }

    /// <summary>
    /// 执行sql语句
    /// </summary>
    /// <param name="sqlStr"></param>
    /// <returns></returns>
    public int ExecuteSql(string sqlStr)
    {
        int ret = -1;
        try
        {
            this.open();//打开链接
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            //返回执行sql语句过程中,受影响的行数
            ret=cmd.ExecuteNonQuery();
            return ret;
        }
        catch
        {
            return ret;
        }
        finally
        {
            this.close();
        }
    }

    /// <summary>
    /// 执行sql语句,不关闭连接,事物处理使用
    /// </summary>
    /// <param name="sqlStr"></param>
    /// <returns></returns>
    public int ExecuteSqlWithTran(string sqlStr)
    {
        int ret = 0;
        try
        {
            this.open();
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            cmd.Transaction = tran;
            ret = cmd.ExecuteNonQuery();
        }
        catch
        {
            ret = -1;
        }
        return ret;
    }

    /// <summary>
    /// 向sqlcommand传参
    /// </summary>
    /// <param name="sqlStr">传入要执行的sql语句</param>
    /// <param name="sqlParametes"></param>
    /// <returns></returns>
    public int ExecuteSqlWithParam(string sqlStr, List<SqlParameter> sqlParametes)
    {
        try
        {
            //打开数据库
            this.open();
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            foreach (SqlParameter p in sqlParametes)
                cmd.Parameters.Add(p);
            return cmd.ExecuteNonQuery();
        }
        catch
        {
            return -1;
        }
        finally
        {
            this.close();
        }
    }
    /// <summary>
    /// 执行sql语句,返回查询的表
    /// </summary>
    /// <param name="sqlStr"></param>
    /// <returns></returns>
    public DataTable GetDataTable(string sqlStr)
    {
        DataTable dt;
        try
        {
            //打开数据库
            this.open();
            SqlDataAdapter sda = new SqlDataAdapter(sqlStr, conn);
            DataSet ds = new DataSet();
            //填充数据集
            sda.Fill(ds);
            dt = ds.Tables[0];
        }
        catch
        {
            dt = null;
        }
        finally
        {
            this.close();
        }
        return dt;
    }

    /// <summary>
    /// 执行sql语句,返回数据行
    /// </summary>
    /// <param name="sqlStr"></param>
    /// <returns></returns>
    public DataRow GetDataRow(string sqlStr)
    {
        DataRow row;
        try
        {//在执行的过程中,返回的是表的数据,表中包含的是行的数据
            row = GetDataTable(sqlStr).Rows[0];//获取指定索引处的行
        }
        catch
        {
            row = null;
        }
        return row;
    }
    /// <summary>
    /// 启动事物
    /// </summary>
    public void BeginTrans()
    {
        tran = conn.BeginTransaction();
    }
    /// <summary>
    /// 提交数据
    /// </summary>
    public void Commit()
    {
        //提交数据
        tran.Commit();
    }
    /// <summary>
    /// 如果数据操作失败,则回滚,回到数据操作前的状态
    /// </summary>
    public void RollBack()
    {
        tran.Rollback();
    }

}

 

 

4.接下来,连接数据库,并更改数据库表,前面代码中,已经将部分所需要使用的数据转换为int,下面直接使用

public void BtnSubmit_Click(object sender,EventArgs e)
{
    DB db=new DB();
string sqlStr="update SelectCourse set Usual=" + intUsual+",Final="+intFinal+",Score="+intScore+"where Sno="+stuNo;
    int row=db.ExecuteSql(sqlStr);
    if(row<1)
    {
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "warning", "alert(\"更新数据失败\")", true);
    }
    else
    {
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "success", "alert(\"数据更新成功\")", true);
    }
}

 

 

至此,数据库的相关操作彻底完成