各位 大虾请看,我用DataGridView动态的显示了两个数据集中的信息, 但是当我在对 数据进行修改, 并使用SqlCommandBuilder,使用SqlDataAdapter的Update()对数据进行修改时, 第一张表成功了, 而与之代码一样的另一张表上的信息修改却失败了。
代码1(对表student的修改--成功)
SqlDataAdapter s = studentManager.GetSdap();
SqlCommandBuilder builder = new SqlCommandBuilder(s);
s.SelectCommand.Connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Tab;Integrated Security=True");
s.Update(ds, "studentTable");
s.SelectCommand.Connection.Close();
s.SelectCommand.Connection.Dispose();
s.Dispose();
代码2 (对表的修改--报出如标题所示的异常!)
SqlDataAdapter s = Manager.GetSdap();
SqlCommandBuilder builder = new SqlCommandBuilder(s);
s.SelectCommand.Connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Tab;Integrated Security=True");
s.Update(ds, "Table");
s.SelectCommand.Connection.Close();
s.SelectCommand.Connection.Dispose();附:
两张表大致结构一样;
两张表数据集绑定在DataGridView的方式一样。谢谢 各位大虾。 小弟初来乍到,基本无分相送,不过,一颗求知之心罢了, 谢谢各位!
代码1(对表student的修改--成功)
SqlDataAdapter s = studentManager.GetSdap();
SqlCommandBuilder builder = new SqlCommandBuilder(s);
s.SelectCommand.Connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Tab;Integrated Security=True");
s.Update(ds, "studentTable");
s.SelectCommand.Connection.Close();
s.SelectCommand.Connection.Dispose();
s.Dispose();
代码2 (对表的修改--报出如标题所示的异常!)
SqlDataAdapter s = Manager.GetSdap();
SqlCommandBuilder builder = new SqlCommandBuilder(s);
s.SelectCommand.Connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Tab;Integrated Security=True");
s.Update(ds, "Table");
s.SelectCommand.Connection.Close();
s.SelectCommand.Connection.Dispose();附:
两张表大致结构一样;
两张表数据集绑定在DataGridView的方式一样。谢谢 各位大虾。 小弟初来乍到,基本无分相送,不过,一颗求知之心罢了, 谢谢各位!
解决方案 »
- 求 String.IndexOfAny(char[] anyOf, int startIndex, int count) 算法.
- 【虎年快乐】TCP 信道协议冲突: 应为报头 ,熟悉的人进来帮忙下。。谢谢
- WPF有MFC里面的PageSheet控件么
- 正则表达式 匹配问题
- SqlCommand对象中的几种执行SQL语句的方法:ExecuteNonQuery,ExecuteReader,ExecuteScalar
- this.dropdownlist..SelectedValue 提取不到值
- 关于Socket通信的问题
- 请教怎么写DataList中RadioButtonList的SelectedIndexChanged事件
- 一个脚本问题(javascript)
- 给PlaceHolder上添加LinkButton,注册了事件,可是回发后没有事件被响应。。。。。
- 求助C# 打印问题
- winform下类似session的全局变量,语句怎么写?
this.dgvMessage.DataSource = ds.Tables["Table"];
dgvMessage.Columns["ID"].HeaderText = "编号";
dgvMessage.Columns["ID"].Visible = false;
dgvMessage.Columns["uNo"].HeaderText = "学号";
dgvMessage.Columns["uName"].HeaderText = "姓名";
dgvMessage.Columns["uGender"].HeaderText = "性别";
dgvMessage.Columns["courseA"].HeaderText = "学科A";
dgvMessage.Columns["courseB"].HeaderText = "学科B";
dgvMessage.Columns["total"].HeaderText = "总分";
dgvMessage.Columns["term"].HeaderText = "学期";
dgvMessage.Columns["uGender"].HeaderText = "性别";
这是我代码2的绑定,
ID为主键。
您们给看看?
SqlDataAdapter sda;SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.Update(ds);
this.dataGridView1.DataSource = ds.Tables[0];
SqlDataAdapter sda = new Sqldataadapter(strsql,conn);
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.Update(ds);
this.dataGridView1.DataSource = ds.Tables[0];
{
//dgvMessage.Columns.Clear();
if (cbxItems.Text.Trim() == "")
{
MessageBox.Show("请选择查询明细!");
}
else if (cbxItems.Text.Trim() == "学员基本信息")
{
ds = studentManager.GetAllStudents();
this.dgvMessage.DataSource = ds.Tables["studentTable"];
dgvMessage.Columns["uNo"].HeaderText="学号";
dgvMessage.Columns["uName"].HeaderText = "姓名";
dgvMessage.Columns["uGender"].HeaderText = "性别";
dgvMessage.Columns["uBirth"].HeaderText = "生日";
dgvMessage.ReadOnly = false;
cbxSex.Enabled = true;
cbxOther.Enabled = false;
}
else if (cbxItems.Text.Trim() == "学员成绩信息")
{
ds = Manager.GetAllMarks();
this.dgvMessage.DataSource = ds.Tables["Table"];
dgvMessage.Columns["ID"].HeaderText = "编号";
dgvMessage.Columns["ID"].Visible = false;
dgvMessage.Columns["uNo"].HeaderText = "学号";
dgvMessage.Columns["uName"].HeaderText = "姓名";
dgvMessage.Columns["uGender"].HeaderText = "性别";
dgvMessage.Columns["courseA"].HeaderText = "学科A";
dgvMessage.Columns["courseB"].HeaderText = "学科B";
dgvMessage.Columns["total"].HeaderText = "总分";
dgvMessage.Columns["term"].HeaderText = "学期";
dgvMessage.Columns["uGender"].HeaderText = "性别";
dgvMessage.ReadOnly = false;
cbxSex.Enabled = true;
cbxSex.Text = "";
cbxOther.Enabled = true;
}
} private void cbxSex_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbxItems.Text.Trim() == "学员基本信息")
{
this.dgvMessage.DataSource = studentManager.GetStudentsBySex(this.cbxSex.Text.Trim()).Tables["studentTable"];
}
else
{
this.dgvMessage.DataSource = Manager.GetMarksBySex(this.cbxSex.Text.Trim(), cbxOther.Text.Trim());
this.dgvMessage.ReadOnly = true;
} }
#region Error Region
private void btnSave_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("确实要将修改保存到数据库吗?", "操作提示!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result == DialogResult.OK)
{
if (cbxItems.Text.Trim() == "学员基本信息")
{
SqlDataAdapter s = studentManager.GetSdap();
SqlCommandBuilder builder = new SqlCommandBuilder(s);
s.SelectCommand.Connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Tab;Integrated Security=True");
s.Update(ds, "studentTable");
s.SelectCommand.Connection.Close();
s.SelectCommand.Connection.Dispose();
s.Dispose();
}
if (cbxItems.Text.Trim() == "学员成绩信息")
{
SqlDataAdapter s = Manager.GetSdap();
SqlCommandBuilder builder = new SqlCommandBuilder(s);
s.SelectCommand.Connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=Tab;Integrated Security=True");
ds.Tables.Clear();
//ds.Tables.Add((DataTable)this.dgvMessage.DataSource);
//s.SelectCommand.Connection.Open();
s.Update(ds, "Table");------报错行,报错原因如标题 s.SelectCommand.Connection.Close();
s.SelectCommand.Connection.Dispose();
}
}
}
#endregion
第一段 学员基本信息能够通过 DATAGRIDVIEW 成功修改, 第二段,就不行啦。
呵呵, 谢谢啦
另外,sqldataadapter最好用他们说的方法建立,别用返回
我没有看见你的select语句啊,比如:selcet *from 表
你的dataset 也没定义
第一个成功是不是巧合啊
我的第一个 和第二个,DATASET。 获取方式如下。
//第一个DATASET构建
public DataSet GetAllStudents()
{
string strSql="select * from tabUser";
objAdapter.SelectCommand.Connection = DBTool.GetConn();
objAdapter.SelectCommand.CommandType = CommandType.Text;
objAdapter.SelectCommand.CommandText = strSql;
ds.Clear();
objAdapter.Fill(ds, "studentTable");
objAdapter.SelectCommand.Connection.Close();
objAdapter.SelectCommand.Connection.Dispose();
return ds;
}
//第二个DATASET构建
public DataSet GetAllMarks()
{
string strSql = "select * from tabMark";
objAdapter.SelectCommand.Connection = DBTool.GetConn();
objAdapter.SelectCommand.CommandType = CommandType.Text;
objAdapter.SelectCommand.CommandText = strSql;
ds.Clear();
objAdapter.Fill(ds, "Table");
objAdapter.SelectCommand.Connection.Close();
objAdapter.SelectCommand.Connection.Dispose();
return ds;
}拜托各位啦, 呵呵
再构建 SQLDATAADAPTER实例时,
SqlDataAdapter sda=new SqlDataAdapter(strSql,conn);
中第一个 参数即T-SQL语句 无从下手, 真是纳闷了, 为什么第一张表能修改。
由于 ,我语言表达不清楚, 让各位麻烦了, 不好意思哦, 另外 麻烦各位能不能教教在下, 如何给分? 嘿嘿
你的程序调试好了?
我现在也在学习datagridview,这是我编的,你看看能不能用:
private void button1_Click(object sender, EventArgs e)
{
SqlConnection sa = new SqlConnection("Data Source=.;Initial Catalog=master;Integrated Security=True");
SqlDataAdapter sda = new SqlDataAdapter("select *from shit", sa);
DataSet ds = new DataSet();
SqlCommandBuilder scbld = new SqlCommandBuilder(sda);
sda.Fill(ds, "temp");
DataRow dr = ds.Tables["temp"].NewRow();
dr["name"] = textBox1.Text;
dr["age"] = Convert.ToInt32(textBox2.Text);
dr["city"] = textBox3.Text;
dr["zip"] = textBox4.Text;
ds.Tables["temp"].Rows.Add(dr);
sda.Update(ds, "temp");
this.shitTableAdapter.Fill(this.masterDataSet1.shit);
shitBindingSource.DataSource = masterDataSet1;
dataGridView1.DataSource = shitBindingSource;