ASP.Net中用DataGrid操作数据库

声明:本文中的内容来自网络,但经过我自己的整理、验证,有些内容无法声明来源,请原作者谅解。

    在asp.net中操作数据库常用DataGrid,本文将常用的方法进行了汇编,适合初学者。

1、使用DataGrid控件显示数据库中的内容:

添加引用

        using System.Data.SqlClient;

// 在此处放置用户代码以初始化页面

//DataGrid控件改名为MyDataGrid

// Page_Load中添加如下代码:

            String selectCmd = "select * from OA_Userlogo";

              SqlConnection myConnection = new SqlConnection("server=chaoming;uid=sa;database=Mytest");

            SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);

            DataSet ds = new DataSet();

            myCommand.Fill(ds, "OA_Userlogo");

            MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;

            MyDataGrid.DataBind();

 

2、在DataGrid中使用参数查询:

      //加入Text控件和按钮控件,在按钮中输入以下内容

String selectCmd = "select * from OA_Userlogo where 密码 = @密码";

 

            SqlConnection myConnection = new SqlConnection("server=chaoming;uid=sa;database=Mytest");

            SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);

 

            myCommand.SelectCommand.Parameters.Add(new SqlParameter("@密码", SqlDbType.VarChar, 50));

              //SqlDbType.Varchar 为表OA_Userlogo中的第三个字段, Varchar必须与数据库中的字段//类型一致,50为第三个字段的长度

            myCommand.SelectCommand.Parameters["@密码"].Value = TextBox1.Text;

 

            DataSet ds = new DataSet();

            myCommand.Fill(ds, "OA_Userlogo");

 

            MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;

MyDataGrid.DataBind();

3、将数据连接信息放在Global.asax文件中

   Global.asax文件中加入引用

using System.Data.SqlClient;

Session_Start 事件中加入以下代码:

     protected void Session_Start(Object sender, EventArgs e)

        {    string f="server=chaoming;uid=sa;database=Mytest";

            SqlConnection NowConn1 = new SqlConnection(f);//连至Mytest数据库

            Session["NowSQLNor"]=NowConn1;

        }

    aspx文件中进行如下修改:

String selectCmd = "select * from OA_Userlogo where 密码 = @密码";

              //这里是引用的关键:

            SqlConnection myConnection = (SqlConnection)Session["NowSQLNor"];

            SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd, myConnection);

 

            myCommand.SelectCommand.Parameters.Add(new SqlParameter("@密码", SqlDbType.VarChar, 50));

            myCommand.SelectCommand.Parameters["@密码"].Value = TextBox1.Text;

 

            DataSet ds = new DataSet();

            myCommand.Fill(ds, "OA_Userlogo");

 

            MyDataGrid.DataSource= ds.Tables["OA_Userlogo"].DefaultView;

            MyDataGrid.DataBind();

           本例将数据库连接作为共享的Session对象,相当实用,Web应用系统其他需获得数据库的位置,就不必打开数据库,只要直接获得已制作完成的Session即可.

 

4、插入数据

  SqlConnection myConnection;//定义一个空连接,不能少

protected void Page_Load(Object Src, EventArgs E)

{   //在页的初始化中加入连接内容

    myConnection = new SqlConnection("server=(local)//NetSDK;database=pubs;Trusted_Connection=yes");//连接字符串

        if (!IsPostBack) //第一次加载本页时执行BindGrid()函数

            BindGrid(); //DataGrid控件中显示数据库中的数据

    }

/*IsPostBack  Page页属性, 表示获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。

属性值:如果是为响应客户端回发而加载该页,则为 true;否则为 false

*/

public void BindGrid()

    {

        SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);

        DataSet ds = new DataSet();

        myCommand.Fill(ds, "Authors");//将数据填充到内存中的表Authors,也可用其他名

        MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;

        MyDataGrid.DataBind();

    }

 

 

 

public void AddAuthor_Click(Object sender, EventArgs E)

    {

        Message.InnerHtml = "";//错误提示

        if (Page.IsValid)   //获取一个值,该值指示页验证是否成功,详细说明见后

        {    //将数据库中的字段与变量连接起来,

            String insertCmd = "insert into Authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) values (@Id, @LName, @FName, @Phone, @Address, @City, @State, @Zip, @Contract)";

SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);

 

myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));

// SqlDbType.NvarChar表示数据库中au_id字段的类型,11表示长度,以下类似

myCommand.Parameters["@Id"].Value = au_id.Value;

// au_id.Valuetext控件或其他控件的值,也可直接赋值如”abcd”

            myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));

            myCommand.Parameters["@LName"].Value = au_lname.Value;

            myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));

            myCommand.Parameters["@FName"].Value = au_fname.Value;

            myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));

            myCommand.Parameters["@Phone"].Value = phone.Value;

            myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));

            myCommand.Parameters["@Address"].Value = address.Value;

            myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));

            myCommand.Parameters["@City"].Value = city.Value;

            myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));

            myCommand.Parameters["@State"].Value = state.Value;

            myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));

            myCommand.Parameters["@Zip"].Value = zip.Value;

            myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));

            myCommand.Parameters["@Contract"].Value = contract.Value;

            myCommand.Connection.Open();

            try

            {

                myCommand.ExecuteNonQuery();//写入数据库

                Message.InnerHtml = "<b>已添加记录</b><br>" + insertCmd + "<p>";

            }

            catch (SqlException e)

            {

                if (e.Number == 2627)

                    Message.InnerHtml = "错误:已存在具有相同主键的记录<p>";

                else

                    Message.InnerHtml = "错误:未能添加记录,请确保正确填写了字段<p>";

              Message.Style["color"] = "red";

            }

            myCommand.Connection.Close();

        }

        BindGrid();//刷新DataGrid显示

    }

/* Page.IsValid 属性

属性值:如果页验证成功,则为 true;否则为 false

备注:若要使该属性返回 truePage.Validators 属性中的所有验证服务器控件必须都验证成功。只有在已调用 Page.Validate 方法,或已在开始窗体处理的 ASP.NET 服务器控件的 OnServerClick 处理程序中将 CausesValidation 属性设置为 true 后才可以选中该属性,。这些服务器控件包括 ButtonHtmlButtonHtmlInputButtonHtmlInputImageImageButton 以及 LinkButton 类。

示例:下面的示例说明使用 IsValid 属性设置条件语句。如果该属性返回 true,则 lblOutput 控件的 Text 属性被设置为“Page is valid!”。否则,它被设置为“Some of the required fields are empty”

void ValidateBtn_Click(Object Sender, EventArgs E) {

   if (Page.IsValid == true) {

      lblOutput.Text = "Page is Valid!";

   }

   else {

      lblOutput.Text = "Some of the required fields are empty";

   } 

}

5、修改数据

修改数据与添加数据不同,为了确定哪一行应该是可编辑的,需要一种方法接受用户关于他们希望编辑哪一行的输入。DataGrid 可以包含一个 EditCommandColumn 来呈现激发三个特殊事件的链接:EditCommandUpdateCommand CancelCommandEditCommandColumn 以声明方式添加到 DataGrid Columns 集合,并将DataGridDataKeyFied属性与数据库中索引字段相连接。如本例中:DataKeyField=au_id

 

SqlConnection myConnection;

    protected void Page_Load(Object Src, EventArgs E)

    {

        myConnection = new SqlConnection("server=(local)//NetSDK;database=pubs;Trusted_Connection=yes");

        if (!IsPostBack)

            BindGrid();

    }

    public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)

    {

        MyDataGrid.EditItemIndex = (int)e.Item.ItemIndex;

        BindGrid();

    }

    public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)

    {

        MyDataGrid.EditItemIndex = -1;

        BindGrid();

    }

    public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)

    {

        String updateCmd = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = @Phone, "

             + "address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id";//where为查询条件

        SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);

        myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));

        myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40));

        myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20));

        myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12));

        myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));

        myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20));

        myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2));

        myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5));

        myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));

        myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)e.Item.ItemIndex];

        String[] cols = {"@Id","@LName","@FName","@Phone","@Address","@City","@State","@Zip","@Contract"};

        int numCols = e.Item.Cells.Count;

        for (int i=2; i<numCols-1; i++) //跳过第一、第二和最后一列

        {

            String colvalue =((TextBox)e.Item.Cells[i].Controls[0]).Text;

            // 检查在所需字段中是否有空值

            if (i<6 && colvalue == "")

            {

                Message.InnerHtml = "错误:作者 ID”姓名电话不允许使用空值";

                Message.Style["color"] = "red";

                return;

            }

            myCommand.Parameters[cols[i-1]].Value = colvalue;

        }

        //追加最后一行,将 true/false 值转换为 0/1

        if (String.Compare(((TextBox)e.Item.Cells[numCols-1].Controls[0]).Text, "True", true)==0)

                    myCommand.Parameters["@Contract"].Value =  "1";

        else

                    myCommand.Parameters["@Contract"].Value =  "0";

        myCommand.Connection.Open();

        try

        {

            myCommand.ExecuteNonQuery();

            Message.InnerHtml = "<b>已更新记录</b><br>" + updateCmd;//可用Text控件替代

            MyDataGrid.EditItemIndex = -1;

        }

        catch (SqlException exc)

        {

            if (exc.Number == 2627)

                Message.InnerHtml = "错误:已存在具有相同主键的记录";

            else

                Message.InnerHtml = "错误:未能更新记录,请确保正确填写了字段";

            Message.Style["color"] = "red";

        }

        myCommand.Connection.Close();

        BindGrid();

    }

    public void BindGrid()

    {

        SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);

        DataSet ds = new DataSet();

        myCommand.Fill(ds, "Authors");

        //MyDataGrid.AutoGenerateColumns=false;

        MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;

        MyDataGrid.DataBind();

    }

如果不希望所有的字段都被修改,可点击DataGrid的属性生成器,将所有列与字段绑定,并将AutoGenerateColumns属性设为false,也可在代码中加入.如上面的红色代码.

 

6、删除数据

从数据库删除非常类似于更新或插入命令,但仍然需要一种方法来确定要具体删除的网格中的行。可以添加到 DataGrid Columns 集合的另一个控件是 ButtonColumn 控件,它只呈现按钮控件。ButtonColumn 支持可以设置为 Delete CommandName 属性。在 DataGrid 上,将事件处理程序连到 DeleteCommand,并从那里执行删除操作。再一次使用 DataKeys 集合确定客户端选择的行。下面的示例说明此过程。

不要忘记将DataGridDataKeyField属性设为emp_id

SqlConnection myConnection;

 

    protected void Page_Load(Object sender, EventArgs e)

    {

        myConnection=new SqlConnection("server=(local)//NetSDK;database=pubs;Trusted_Connection=yes");

 

        if (!IsPostBack)

            BindGrid();

    }

 

    public void MyDataGrid_Delete(Object sender, DataGridCommandEventArgs e)

    {

        String deleteCmd = "DELETE from Employee where emp_id = @Id";

 

        SqlCommand myCommand = new SqlCommand(deleteCmd, myConnection);

        myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11));

        myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)e.Item.ItemIndex];

 

        myCommand.Connection.Open();

 

        try

        {

            myCommand.ExecuteNonQuery();

            Message.InnerHtml = "<b>已删除记录</b><br>" + deleteCmd;

        }

        catch (SqlException)

        {

            Message.InnerHtml = "错误:未能删除记录";

            Message.Style["颜色"] = "红色";

        }

 

        myCommand.Connection.Close();

 

        BindGrid();

    }

 

    public void BindGrid()

    {

        SqlDataAdapter myCommand = new SqlDataAdapter("select * from Employee", myConnection);

 

        DataSet ds = new DataSet();

        myCommand.Fill(ds, "员工");

 

        MyDataGrid.DataSource=ds.Tables["员工"].DefaultView;

        MyDataGrid.DataBind();

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值