首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

dataGridView控件如何把上面修改的数据写到sql2000里面

2012-04-28 
dataGridView控件怎么把上面修改的数据写到sql2000里面如题,我是用dataGridView添加数据源然后直接显示但

dataGridView控件怎么把上面修改的数据写到sql2000里面
如题,我是用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();
  }
  }

[解决办法]
在同一个SqlDataAdapter 的情况下,用SqlCommandBuider 然后调用
this.link_fileTableAdapter.Update(this.mybaseDataSet); 

[解决办法]
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 + " '"; 

this.link_fileTableAdapter = new SqlDataAdapter(sql, mySqlConnection);
SqlCommandBuilder cmb = new SqlCommandBuilder(this.link_fileTableAdapter);
DataSet myDS = new DataSet(); 
myAD.Fill(myDS, "project"); 
this.dataGridView1.DataSource = myDS.Tables[0].DefaultView;//输出表 

//...
}

[解决办法]
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 + " '"; 

this.link_fileTableAdapter = new SqlDataAdapter(sql, mySqlConnection); 
SqlCommandBuilder cmb = new SqlCommandBuilder(this.link_fileTableAdapter); 

this.link_fileTableAdapter.Fill(this.mybaseDataSet, "project"); 
this.dataGridView1.DataSource = this.mybaseDataSet.Tables[0].DefaultView;//输出表 

//... 


查询和更新使用同一个dataadapter,dataset。


[解决办法]
只有select单个表才能实现这样在线编辑
(1)link_fileTableAdapter,mybaseDataSet声明为私有变量
(2)修改search_Click为

C# code
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 + " '";                 link_fileTableAdapter= new SqlDataAdapter(sql, mySqlConnection);                 //DataSet myDS = new DataSet();                 link_fileTableAdapter.Fill(mybaseDataSet, "project");                 this.dataGridView1.DataSource = myDS.Tables[0].DefaultView;//输出表             }             catch (Exception oe) { MessageBox.Show(oe.Message, "数据库出错!"); }             finally             {                 if (mySqlConnection.State == ConnectionState.Open)                     mySqlConnection.Close();             }         }
[解决办法]
探讨
别的帖子说用SqlCommandBuilder
3秒钟搞定
可惜没有具体点的
我试了半天楞是没做到

[解决办法]
用SqlCommandBuilder 需要有主键,然后他会自动的生成update,insert,delete command

如果不用SqlCommandBuilder就要手动为DataAdapter设置相关的insert,delete,update command,参看下例:
C# code
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;                    }    }}
[解决办法]
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;

}

}

这样应该可以 试下
[解决办法]
DataTable dt = this.dataGridView1.DataSource as DataTable; 
这行的问题.
你可以把DataTable声明在方法外边.因里边.像12楼我发的代码那样声明.然后就不用this.dataGridView1.DataSource as DataTable了.
[解决办法]
13楼代码修改如下:

C# code
 
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;     
    }


  }
}


热点排行