DialogResult result = MessageBox.Show("确定要保存吗?", "请确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
OleDbConnection cnn = new OleDbConnection(connections);
cnn.Open();
oda=new OleDbDataAdapter("select MaterielRegiser_Number as 货料编号,MaterielRegiser_Name as 货料名称,MaterielRegiser_Model as 规格型号,MaterielRegiser_Unit as 单位 from MIS_MaterielRegiser",cnn);
OleDbCommandBuilder ocb=new OleDbCommandBuilder(oda); DataSet ds=new DataSet();
oda.Fill(ds,"MIS_MaterielRegiser");
//try
//{
if (result == DialogResult.Yes)
{
//for (int i = 0; i < dgv_Data.Rows.Count; i++)
//{
string number = Convert.ToString(this.dgv_Data.Rows[2].Cells[0].Value);
string name = Convert.ToString(this.dgv_Data.Rows[2].Cells[1].Value);
string model =Convert.ToString(this.dgv_Data.Rows[2].Cells[2].Value);
string unit = Convert.ToString(this.dgv_Data.Rows[2].Cells[3].Value);//前面三个变量都能取到值,就这个取不到 DataRow row = ds.Tables["MIS_MaterielRegiser"].NewRow();
row["货料编号"] = number;
row["货料名称"] = name;
row["规格型号"] = model;
row["单位"] = unit;
ds.Tables["MIS_MaterielRegiser"].Rows.Add(row);
oda.Update(ds, "MIS_MaterielRegiser");单步调试发现这2行代码根代根本没运行,怎么办
OleDbConnection cnn = new OleDbConnection(connections);
cnn.Open();
oda=new OleDbDataAdapter("select MaterielRegiser_Number as 货料编号,MaterielRegiser_Name as 货料名称,MaterielRegiser_Model as 规格型号,MaterielRegiser_Unit as 单位 from MIS_MaterielRegiser",cnn);
OleDbCommandBuilder ocb=new OleDbCommandBuilder(oda); DataSet ds=new DataSet();
oda.Fill(ds,"MIS_MaterielRegiser");
//try
//{
if (result == DialogResult.Yes)
{
//for (int i = 0; i < dgv_Data.Rows.Count; i++)
//{
string number = Convert.ToString(this.dgv_Data.Rows[2].Cells[0].Value);
string name = Convert.ToString(this.dgv_Data.Rows[2].Cells[1].Value);
string model =Convert.ToString(this.dgv_Data.Rows[2].Cells[2].Value);
string unit = Convert.ToString(this.dgv_Data.Rows[2].Cells[3].Value);//前面三个变量都能取到值,就这个取不到 DataRow row = ds.Tables["MIS_MaterielRegiser"].NewRow();
row["货料编号"] = number;
row["货料名称"] = name;
row["规格型号"] = model;
row["单位"] = unit;
ds.Tables["MIS_MaterielRegiser"].Rows.Add(row);
oda.Update(ds, "MIS_MaterielRegiser");单步调试发现这2行代码根代根本没运行,怎么办
oda.Update(ds, "MIS_MaterielRegiser"); 上面没错的话,应该就是你数据库操作这出的问题。
你确定dgv_Data重新绑定数据了吗?
为什么不从ds里取数据?
不要太早下结论,我做了一个简单的东西,你看一下 private void Form4_Load(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString=@"provider=sqloledb.1;data source=。\MSSQL2008;initial catalog=xfcms;user id=sa;pwd=";//连接数据库的字符串
DataSet ds = new DataSet();//
string sql = "select * from test";
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);//从数据库中查询 da.Fill(ds);//将数据填充到DataSet this.dataGridView1.DataSource = ds.Tables[0];
} private void button1_Click(object sender, EventArgs e)
{
DataTable dt = (DataTable)dataGridView1.DataSource;
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString=@"provider=sqloledb.1;data source=。\MSSQL2008;initial catalog=xfcms;user id=sa;pwd=";//连接数据库的字符串
DataSet ds = new DataSet();//
string sql = "select * from test";
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
OleDbCommandBuilder ocb = new OleDbCommandBuilder(da);
da.Update(dt);
}winform不象webform,大多数程序员受webform代码编写方式的影响,很多东西都喜欢自己搞,但是实际上winform的数据绑定因为都是在本地,所以他的状态是自维护的,你可以直接用适配器去更新
是要使用OleDbCommandBuilder ocb = new OleDbCommandBuilder(da);
这个自动生成对应的InsertCommand语句,使用这条语句后,微软会自动根据你的查询语句生成对应的插入语句(省掉你自己手写update,insert命令语句的过程)以便让适配器去更新
DialogResult result = MessageBox.Show("确定要保存吗?", "请确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
DataTable dt = (DataTable)dgv_Data.DataSource;
ocnn = new OleDbConnection(connections);
ocnn.Open();
DataSet ds = new DataSet();
string sql = "select * from MIS_MaterielRegiser";
oda = new OleDbDataAdapter(sql, ocnn);
ocb = new OleDbCommandBuilder(oda);
oda.Update(dt);DataTable“MIS_MaterielRegister”中缺少 SourceColumn“MaterielRegiser_Number”的 DataColumn“MaterielRegiser_Number”。 }
ocnn.Close();
DialogResult result = MessageBox.Show("确定要保存吗?", "请确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
DataTable dt = (DataTable)dgv_Data.DataSource;
ocnn = new OleDbConnection(connections);
ocnn.Open();
DataSet ds = new DataSet();
string sql = "select MaterielRegiser_Number as 货料编号,MaterielRegiser_Name as 货料名称,MaterielRegiser_Model as 规格型号,MaterielRegiser_Unit as 单位 from MIS_MaterielRegiser";//这条语句一定要跟绑定时的语句是一样的
oda = new OleDbDataAdapter(sql, ocnn);
ocb = new OleDbCommandBuilder(oda);
ocb.QuotePrefix = "[";
ocb.QuoteSuffix = "]";这两行是解决我问题的关键,这是为它自动生成的SQL语句的字段添加‘[]’,ACCESS要求比较严格!
oda.Update(dt); }
ocnn.Close();
结帖!