我用VS2005连接数据库已经成功了,但是对于数据操作还不会
我建立了一个dataGridView1来显示数据
建了一个查询按钮,按钮的事件如下
private void cx_Click(object sender, EventArgs e)
{
//连接数据库字符串
conn.ConnectionString = "server=192.168.122.186;database=student;uid=sa;pwd=sa";
//定义一个DataAdapter载体
SqlDataAdapter zt = new SqlDataAdapter("select * from jbxx", conn);
//填充数据集
zt.Fill(ds, "student");
//绑定数据
this.dataGridView1.DataSource = ds.Tables["student"];
dataGridView1.Visible = true;
}
一点查询,结果出来,但是再点数据就重复出来了,这该怎么办
我想知道如何进行进行删除,增加,修改,查询等操作
我建立了一个dataGridView1来显示数据
建了一个查询按钮,按钮的事件如下
private void cx_Click(object sender, EventArgs e)
{
//连接数据库字符串
conn.ConnectionString = "server=192.168.122.186;database=student;uid=sa;pwd=sa";
//定义一个DataAdapter载体
SqlDataAdapter zt = new SqlDataAdapter("select * from jbxx", conn);
//填充数据集
zt.Fill(ds, "student");
//绑定数据
this.dataGridView1.DataSource = ds.Tables["student"];
dataGridView1.Visible = true;
}
一点查询,结果出来,但是再点数据就重复出来了,这该怎么办
我想知道如何进行进行删除,增加,修改,查询等操作
{
conn.ConnectionString = "server=192.168.122.186;database=student;uid=sa;pwd=sa";
SqlCommand cmd = new SqlCommand(conn);
conn.Open();
cmd.ComandText="update tb set a=b" ;//"删除,更新语句"
cmd.ExecuteNonQuery();// cmd.ExecuteReader();//
}
ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。
Command主要有三个方法:
ExecuteNonQuery () :执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。
ExecuteReader ():执行一个查询的SQL 语句,返回一个DataReader对象。
ExecuteScalar ():从数据库检索单个值。这个方法主要用于统计操作。
{
//连接数据库字符串
conn.ConnectionString = "server=192.168.122.186;database=student;uid=sa;pwd=sa";
//定义一个DataAdapter载体
SqlDataAdapter zt = new SqlDataAdapter("select * from jbxx", conn);
DataTable data=new DataTable();
//填充数据集
zt.Fill(data);
//绑定数据
this.dataGridView1.DataSource = data;
dataGridView1.Visible = true;
}你的代码得不到想要的效果是因为DataSet不是全局变量,每次查询填充时原来查询出来存储在ds.Tables["student"]中的数据还在,查一次就会重复一次。应该是每次重新实例化一个对象存储。
update 表名 set 表中的某一列 = 某值 修改
delete 表名 where 表中的某一列 = 某值 删除
那如果我要按照某个条件来查询这个该怎么办
if(textBox6.Text=="")
{
//定义一个DataAdapter载体
SqlDataAdapter zt = new SqlDataAdapter("select * from jbxx", conn);
//重新实例化一个存储对象
DataSet ds = new DataSet();
//DataTable data = new DataTable();
//填充数据集
zt.Fill(ds,"jbxx");
//绑定数据
this.dataGridView1.DataSource = ds.Tables["jbxx"];
dataGridView1.Visible = true;
}
else
{
//定义一个DataAdapter载体
SqlDataAdapter zt = new SqlDataAdapter("select * from jbxx where gh='"+textBox6.Text+"'", conn);
//重新实例化一个存储对象
DataSet ds = new DataSet();
//DataTable data = new DataTable();
//填充数据集
zt.Fill(ds, "jbxx");
//绑定数据
this.dataGridView1.DataSource = ds.Tables["jbxx"];
dataGridView1.Visible = true;
}
//重新实例化一个存储对象
DataSet ds = new DataSet();
//DataTable data = new DataTable();
//填充数据集
zt.Fill(ds,"jbxx");
//绑定数据
this.dataGridView1.DataSource = ds.Tables["jbxx"];
dataGridView1.Visible = true;
抽象成一个方法就可以
public void Bind(string str)
{
string strSelect = "";
if (str == "")
{
strSelect = "select * from jbxx";
}
else
strSelect = "select * from jbxx where gh='" + str + "'";
//定义一个DataAdapter载体
SqlDataAdapter zt = new SqlDataAdapter(strSelect, conn);
//重新实例化一个存储对象
DataSet ds = new DataSet();
//DataTable data = new DataTable();
//填充数据集
zt.Fill(ds, "jbxx");
//绑定数据
this.dataGridView1.DataSource = ds.Tables["jbxx"];
dataGridView1.Visible = true; }然后你的点击时间就直接调用这个方法就好了。你试试