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

保存不进去,该怎么解决

2012-04-09 
保存不进去string sql select monthY,ProcessID,WorkReward,OtherReward,AveReward,Persons,CalcDate,R

保存不进去
string sql = "select monthY,ProcessID,WorkReward,OtherReward,AveReward,Persons,CalcDate,Remarks from MonthPreReward";// where monthY='" + monthy + "'";
  SqlConnection con = new SqlConnection(Config.ConnectionString);
  SqlDataAdapter ada = new SqlDataAdapter(sql, con);
  dt = new DataTable();
  ada.Fill(dt);
  dgview.DataSource = dt.DefaultView;

string sql = @"select monthY,ProcessID,WorkReward,OtherReward,AveReward,Persons,CalcDate,Remarks from MonthPreReward";
  SqlConnection con = new SqlConnection(Config.ConnectionString);
  SqlDataAdapter ada = new SqlDataAdapter(sql, con);
  SqlCommandBuilder build = new SqlCommandBuilder(ada);
  ada.Update(dt);
  MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
谁帮我看看这点代码,上面是加载,下面是保存,不知道为什么保存不进去,总是出错
提示说datatable为空,加载的时候明明有东西了,dt是个公有的datatable


[解决办法]
你下面的保存,为什么又new了一个 SqlDataAdapter ada 啊,如果要保存也应该是针对上面那个保存啊
[解决办法]
怎么 2个SqlDataAdapter 了 我写了个demo 你看看

C# code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;using System.Data.Common;namespace qqq{    public partial class dateset : Form    {        public dateset()        {            InitializeComponent();        }        SqlConnection conn;        SqlDataAdapter sda;        DataSet ds;        int m;        private void dateset_Load(object sender, EventArgs e)        {            conn = new SqlConnection("Data Source=.;Initial Catalog=TQMS_QuestionManager;User ID=sa;Password=123");            SqlCommand cmd = new SqlCommand("select * from  dbo.TQ_UserInfo", conn);            sda = new SqlDataAdapter();            sda.SelectCommand = cmd;            ds = new DataSet();            sda.Fill(ds, "aaaa");            dataGridView1.DataSource = ds.Tables[0];            bnt2.Visible = false;            groupBox2.Visible = false;            m = 1;        }        private void btn1_Click(object sender, EventArgs e)        {            conn=new SqlConnection("Data Source=.;Initial Catalog=TQMS_QuestionManager;User ID=sa;Password=123");            SqlCommand cmd = new SqlCommand("select * from  dbo.TQ_Chapters",conn);            sda = new SqlDataAdapter();            sda.SelectCommand = cmd;            ds = new DataSet();            sda.Fill(ds,"bbb");            dataGridView1.DataSource = ds.Tables[0];            groupBox1.Visible = false;            groupBox2.Visible = true;            btn1.Visible = false;            bnt2.Visible = true;            m = 2;        }        private void update_Click(object sender, EventArgs e)        {            DataTable dt = ds.Tables["aaaa"];            sda.FillSchema(dt, SchemaType.Mapped);            DataRow dr = dt.Rows.Find(TxtID.Text);            dr["TQ_UserName"] = txtName.Text.Trim();            dr["TQ_TureName"]=txtTureName.Text.Trim();            dr["TQ_UserPwd"]=txtPassWord.Text.Trim();            dr["TQ_Email"]=txtEmail.Text.Trim();            dr["TQ_UserType"] = txtUserType.Text.Trim();            SqlCommandBuilder cmdbuilder = new SqlCommandBuilder(sda);            sda.Update(dt);            MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK,MessageBoxIcon.Information);        }        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)        {            if(m == 1)            {                TxtID.Text = dataGridView1.SelectedCells[0].Value.ToString();                txtName.Text = dataGridView1.SelectedCells[1].Value.ToString();                txtTureName.Text=dataGridView1.SelectedCells[2].Value.ToString();                txtPassWord.Text = dataGridView1.SelectedCells[3].Value.ToString();                txtEmail.Text = dataGridView1.SelectedCells[4].Value.ToString();                txtUserType.Text = dataGridView1.SelectedCells[5].Value.ToString();            }            else            {                txtChapterID.Text = dataGridView1.SelectedCells[0].Value.ToString();                txtChapterName.Text = dataGridView1.SelectedCells[1].Value.ToString();                txtCourseID.Text = dataGridView1.SelectedCells[2].Value.ToString();            }        }        private void bnt2_Click(object sender, EventArgs e)        {            dateset_Load(sender,e);            btn1.Visible = true;            bnt2.Visible = false;            groupBox1.Visible = true;            groupBox2.Visible = false;        }    }} 


[解决办法]
你是不是那里开了个事务?
[解决办法]
ada.Update(dt);
 
这个dt 估计你在别的地方不小心给清了

你再定义个 dt1 
加载的时候后面加个 dt1= dt
然后
 ada.Update(dt1);
这dt1是新定义的,不可能被清了,试试吧
[解决办法]

探讨

经过多次测试发现一个问题,求帮看看,
我在dgv里面输入一行之后,把焦点移到别的行上点保存就可以保存进去,要是不移,焦点还在当前行(就是刚才输入的行)点保存就保存不进去,
说明一下,
保存时我调用过dgview.EndEdit();
不明白这是为什么,求高手现身

[解决办法]

我的意思是 你再定义一个公有的dt1,加载的时候 让dt1=dt,
然后在保存的时候 ada.Update(dt1);
看看dt1里面是否有内容,
这是你代码里新定义的datatable,除了这两个地方没别的地方用到

ada.Update(dt1)中
如果dt1有值说明你代码中 不知道什么操作把原来的 dt的内容清了,
如果没值就是和dgview.EndEdit()这个方法有关呗

热点排行