dataGridView控件怎么把上面修改的数据写到sql2000里面

cainiao66 2008-12-24 09:37:38
如题,我是用dataGridView添加数据源然后直接显示
但是直接在控件上更新数据以后不知道怎么把修改的信息重新写进数据库
private void change_Click(object sender, EventArgs e)
{
try
{
this.link_fileTableAdapter.Update(this.mybaseDataSet);
}catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
MessageBox.Show("修改成功!");
}
网上看了些帖子
但是执行后数据库的数据没有改变
数据库用的是MS-SQL2000
数据名用的是mybase
修改的表叫link_file
不知道是不是更新的数据集不对
新手,请指教
是在winfrom下的编程
下面是我写的查询
private void search_Click(object sender, EventArgs e)
{
SqlConnection mySqlConnection = new SqlConnection("Server=localhost; Integrated Security=SSPI;Initial Catalog=mybase;");
try
{
mySqlConnection.Open();
string sql = "Select * from link_file where Link_Num='" +text.Text + " '";
SqlDataAdapter myAD = new SqlDataAdapter(sql, mySqlConnection);
DataSet myDS = new DataSet();
myAD.Fill(myDS, "project");
this.dataGridView1.DataSource = myDS.Tables[0].DefaultView;//输出表
}
catch (Exception oe) { MessageBox.Show(oe.Message, "数据库出错!"); }
finally
{
if (mySqlConnection.State == ConnectionState.Open)
mySqlConnection.Close();
}
}
...全文
418 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
songhongzhe123 2012-04-25
  • 打赏
  • 举报
回复
整到最后我还是用的sql语句 一个一个更的 想找个简便方法都找不到
pzf5200 2008-12-29
  • 打赏
  • 举报
回复

//更新语句
SqlCommandBuilder myAD= new SqlCommandBuilder(myAD);
dataAdapter.Update(dataSet,"表名");
wangping_li 2008-12-28
  • 打赏
  • 举报
回复
就你提问的代码问题出在查询出来的dataset和提交的dataset不是同一个,所以导致数据库不会有任何更新:
private void search_Click(object sender, EventArgs e)
{
SqlConnection mySqlConnection = new SqlConnection("Server=localhost; Integrated Security=SSPI;Initial Catalog=mybase;");
try
{
mySqlConnection.Open();
string sql = "Select * from link_file where Link_Num='" +text.Text + " '";
SqlDataAdapter myAD = new SqlDataAdapter(sql, mySqlConnection);
DataSet myDS = new DataSet();
myAD.Fill(myDS, "project");
this.dataGridView1.DataSource = myDS.Tables[0].DefaultView;//输出表
}
catch (Exception oe) { MessageBox.Show(oe.Message, "数据库出错!"); }
finally
{
if (mySqlConnection.State == ConnectionState.Open)
mySqlConnection.Close();
}
}

你这里提交的:
this.link_fileTableAdapter.Update(this.mybaseDataSet);
update的dataset一定要是你绑定时的myDs,因为你绑定的是myds,所以界面的删改都是针对myds,所以一定要提交myds
我22楼回的不行?你必须保证是同一个DataSet,另外在
link_fileTableAdapter.Update(myDs)前加一个
myDs.AcceptChanges();
cainiao66 2008-12-27
  • 打赏
  • 举报
回复
UP有人能帮解释下吗
heroyct 2008-12-27
  • 打赏
  • 举报
回复
用xsd来做。。连接好了数据库,
dataAdapter的insert delete update select都自动生成
在update就可以了
lovehongyun 2008-12-25
  • 打赏
  • 举报
回复
13楼代码修改如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsApplication3
{
public partial class Form1 : Form
{
DataTable dt;//放外边
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if(dt==null)
{return;}
SqlConnection con = new SqlConnection("Server=.;Integrated Security=True;Database=pubs");
//更新
SqlDataAdapter da2 = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("update authors set au_lname=@au_lname where au_id=@au_id",con);
da2.UpdateCommand = cmd;
da2.UpdateCommand.Parameters.Add(new SqlParameter("@au_lname", SqlDbType.VarChar, 40, "au_lname"));
da2.UpdateCommand.Parameters.Add(new SqlParameter("@au_id", SqlDbType.VarChar, 11, "au_id"));

//这里的foreach你可以不要。你在窗体上的datagridview中对au_lname字段进行修改即可。
//我在这里为了你看的清楚所以代码中修改au_lname字段的值
//我这里只设置了SqlDataAdapter的UpdateCommand,你还需要设置insert,delete的 command,这样它会根据你DataTable中datarow的行状态自动调用相应的command来完成操作
foreach (DataRow dr in dt.Rows)
{
dr["au_lname"] += " test";
}

da2.Update(dt);

}

private void Form1_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Server=.;Integrated Security=True;Database=pubs");
SqlDataAdapter da = new SqlDataAdapter("select * from authors", con);
dt = new DataTable();//这里改了
da.Fill(dt);
this.dataGridView1.DataSource = dt;
}


}
}


默然zxy 2008-12-25
  • 打赏
  • 举报
回复
在update后增加,dataSet1.AcceptChanges();就可以更新数据库了
lovehongyun 2008-12-25
  • 打赏
  • 举报
回复
DataTable dt = this.dataGridView1.DataSource as DataTable;
这行的问题.
你可以把DataTable声明在方法外边.因里边.像12楼我发的代码那样声明.然后就不用this.dataGridView1.DataSource as DataTable了.
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lovehongyun 的回复:]
用SqlCommandBuilder 需要有主键,然后他会自动的生成update,insert,delete command

如果不用SqlCommandBuilder就要手动为DataAdapter设置相关的insert,delete,update command,参看下例:
C# codeusingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.SqlClient;namespaceWindowsApplication3
{public…
[/Quote]
抛出个异常:
值不能为空,参数名datatable
好像是没得到数据源
我基本上是照着抄下来的
private void change_Click(object sender, EventArgs e)
{
SqlConnection mySqlConnection = new SqlConnection("Server=localhost; Integrated Security=SSPI;Initial Catalog=mybase;");
try
{
mySqlConnection.Open();
DataTable dt = this.dataGridView1.DataSource as DataTable;
SqlDataAdapter da2 = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("update link_file set Link_Num=@Link_Num where LinkID=@LinkID", mySqlConnection);
da2.UpdateCommand = cmd;
da2.UpdateCommand.Parameters.Add(new SqlParameter("@Link_Num", SqlDbType.VarChar, 40, "Link_Num"));
da2.UpdateCommand.Parameters.Add(new SqlParameter("@LinkID", SqlDbType.VarChar, 11, "LinkID"));
da2.Update(dt);
}
catch (Exception oe) { MessageBox.Show(oe.Message, "数据库出错!"); }
finally
{
if (mySqlConnection.State == ConnectionState.Open)
mySqlConnection.Close();
}
}
yigexiaozi 2008-12-25
  • 打赏
  • 举报
回复
public void Update(DataTable dt)
{
try
{
//创建CommandBuilder
OracleCommandBuilder cbCommandBuilder;
string sql = "Select * from link_file where Link_Num='" +text.Text + " '";
//实例化DataAdapter
dataAdapter = new OracleDataAdapter(sql, connection);
cbCommandBuilder = new OracleCommandBuilder(dataAdapter);

//使用Update方法更改数据库
dataAdapter.Update(dt.Select(null, null, DataViewRowState.Deleted));
dataAdapter.Update(dt.Select(null, null, DataViewRowState.ModifiedCurrent));
dataAdapter.Update(dt.Select(null, null, DataViewRowState.Added));
dt.AcceptChanges();
cbCommandBuilder.Dispose();
}
catch (Exception ex)
{
throw ex;

}

}

这样应该可以 试下
lovehongyun 2008-12-25
  • 打赏
  • 举报
回复
用SqlCommandBuilder 需要有主键,然后他会自动的生成update,insert,delete command

如果不用SqlCommandBuilder就要手动为DataAdapter设置相关的insert,delete,update command,参看下例:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Server=.;Integrated Security=True;Database=pubs");
//更新
DataTable dt = this.dataGridView1.DataSource as DataTable;
SqlDataAdapter da2 = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("update authors set au_lname=@au_lname where au_id=@au_id",con);
da2.UpdateCommand = cmd;
da2.UpdateCommand.Parameters.Add(new SqlParameter("@au_lname", SqlDbType.VarChar, 40, "au_lname"));
da2.UpdateCommand.Parameters.Add(new SqlParameter("@au_id", SqlDbType.VarChar, 11, "au_id"));

//这里的foreach你可以不要。你在窗体上的datagridview中对au_lname字段进行修改即可。
//我在这里为了你看的清楚所以代码中修改au_lname字段的值
//我这里只设置了SqlDataAdapter的UpdateCommand,你还需要设置insert,delete的 command,这样它会根据你DataTable中datarow的行状态自动调用相应的command来完成操作
foreach (DataRow dr in dt.Rows)
{
dr["au_lname"] += " test";
}

da2.Update(dt);

}

private void Form1_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Server=.;Integrated Security=True;Database=pubs");
SqlDataAdapter da = new SqlDataAdapter("select * from authors", con);
DataTable dt = new DataTable();
da.Fill(dt);
this.dataGridView1.DataSource = dt;
}


}
}
lovehongyun 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cainiao66 的回复:]
别的帖子说用SqlCommandBuilder
3秒钟搞定
可惜没有具体点的
我试了半天楞是没做到
[/Quote]


private DataTable dt = null;
System.Data.SqlClient.SqlConnection conn = null;
System.Data.SqlClient.SqlDataAdapter da = null;
private void button1_Click(object sender, System.EventArgs e)
{

if(dt!=null)
{
System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(this.da);
da.Update(dt);
}
}

private void Form1_Load(object sender, System.EventArgs e)
{
dt= new DataTable();
conn = new System.Data.SqlClient.SqlConnection("workstation id=localhost;Integrated Security=SSPI;Database=pubs");
da = new System.Data.SqlClient.SqlDataAdapter();
da.SelectCommand = new System.Data.SqlClient.SqlCommand("select * from authors",this.conn);
da.Fill(dt);
this.dgv1.DataSource = dt;
}
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
别的帖子说用SqlCommandBuilder
3秒钟搞定
可惜没有具体点的
我试了半天楞是没做到
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
UP
谁帮忙看下
帮我改下
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
能不能在我原先的基础上改下
上面说的有些改完了连显示数据的功能都没有了
更别说修改现有数据了
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
我是在”Link_Num“这个字段上修改的数据啊
而且在数据库中是主键
但是点change_click数据库中还是没有更改啊
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
18楼的代码就是在au_lname这个字段不断的加text这个字符串
怎么获得当前光标的当前修改
或者多个行在修改后,如何进行行标记
又不是自动标记,又不能用事件,那起不是要读取数据库中的数据进行对比然后写入?
哎。。。。。。
迷茫了
lovehongyun 2008-12-25
  • 打赏
  • 举报
回复
不好意思
虽然你说我delete做的不对
是不能在控件上直接修改只是用SQL直接删除,但是对现在我这个小程序还是很管用的
你帮我写的这个最后是显示“数据更新成功!”
可惜它是个小骗子,对数据库根本没有操作
再查询下还是老样子,在数据库中也没有更改
======================
没更新是因为行状态不对,你得对grid上的数据修改后再去点change按钮

试着运行18楼的代码.
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lovehongyun 的回复:]
我把你上面的代码改了.delete的我没有管.你的delete写的根本就不对,先不管他了.
注意看我代码里边的注释
C# codeusingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.SqlClient;namespacezj_university
{publicpartialclassFormASearch : Form
{
DataTable dt;publicFormASearch()

[/Quote]
不好意思
虽然你说我delete做的不对
是不能在控件上直接修改只是用SQL直接删除,但是对现在我这个小程序还是很管用的
你帮我写的这个最后是显示“数据更新成功!”
可惜它是个小骗子,对数据库根本没有操作
再查询下还是老样子,在数据库中也没有更改
cainiao66 2008-12-25
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lovehongyun 的回复:]
我从你的代码中看出你对dataadapter和DataRow行状态的概念根本就不懂.
建议你先好好看一下书,或看看msdn

上面这么多代码.其实就是sqldataadapter和DataTable中行状态的使用,把这个搞明白了就全懂了.

你可以运行我18楼发的代码,然后看一下效果
我用的库你机器里应该会有的


[/Quote]刚学习C#还不到一个月
不好意思
很多东西都不懂
一后会多像你学习的
加载更多回复(14)

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧