ITPub博客

首页 > 数据库 > 数据库开发技术 > ASP.Net中用DataGrid操作数据库

ASP.Net中用DataGrid操作数据库

原创 数据库开发技术 作者:hljhrbsjf 时间:2006-11-15 20:07:25 0 删除 编辑

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

在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 = "已添加记录
" + insertCmd + "

";

            }

            catch (SqlException e)

            {

                if (e.Number == 2627)

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

";

                else

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

";

              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//跳过第一、第二和最后一列

{

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)

myComm

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/631872/viewspace-877631/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    115
  • 访问量
    526722