UpdStustrconnClass和UpdStustrconnName都是对应了某张表的完整查询吗?而那对应的表有主键吗?我从没用过SqlCommandBuilder来自动生成update和delete语句,因为我不相信自动生成的会适合我。所以我建议你也不要用它,真的不好用。正确的做法应该是自己写UPDATE语句、DELETE语句,然后设置到UpdStuGrdsqlda.UpdateCommand.CommandText和UpdStuGrdsqlda.DeleteCommand.CommandText上,然后自己添加参数。
da.UpdateCommand.CommandText = "update table1 set column1=@column1 where id=@id1";
da.UpdateCommand.Parameters.Add("@column1", SqlDbType.Int,0,"column1");
da.UpdateCommand.Parameters.Add("@id1", SqlDbType.Int, 0, "id1");
da.UpdateCommand.Connection = UpdSconn;
da.UpdateCommand.CommandText = "update table1 set column1=@column1 where id=@id1";
da.UpdateCommand.Parameters.Add("@column1", SqlDbType.Int,0,"column1");
da.UpdateCommand.Parameters.Add("@id1", SqlDbType.Int, 0, "id1");
da.UpdateCommand.Connection = UpdSconn;
学习
System.InvalidOperationException:ExecuteReader:CommandText属性尚未初始化
在System.Data.Common.DbDataAdapter.UpdatingRowStatus(RowUpdtingEvenArgs rowUpdateEvent,DataRow dataRow)
在System.Data.Common.DbDataAdapter.Updata(DataRow[] dataRows,DataTableMapping tableMapping)
在System.Data.Common.DbDataAdapter.UpdataFromDataTable(DataTable dataTable ,DataTableMapping tableMapping)
在System.Data.Common.DbDataAdapter.Updata(DataSet dataSet ,String scrTable)
private void QryStuN_Click(object sender, System.EventArgs e)
{
try
{
UpdStustrconnName = "select HuZhu_id as 户主号,HuZhu_name as 姓名,Sex as 性别,Birth as 出生年月,Nation as 民族,XiangZhen_id as 乡镇,Entrance_date as 参保时间,home as 家庭地址,politic as 政治面貌,ID as 身份证号,Job as 职位 from HuZhu where HuZhu_name=" + "'" + this.QryStuName.Text.ToString().Trim() + "'";
UpdSconn=new SqlConnection(UpdStuconnstr);
UpdStuGrdsqlda=new SqlDataAdapter(UpdStustrconnName,UpdSconn);
UpdNameStudset.Clear(); UpdStuGrdsqlda.Fill(UpdNameStudset,"HuZhu");
UpdStuGrdDg.DataSource=UpdNameStudset.Tables[0];
}
catch
{
MessageBox.Show("查询失败。","确认");
}
}
//根据户主乡镇查询户主信息
private void QueryStuClass_Click(object sender, System.EventArgs e)
{
try
{
UpdStustrconnClass = "select HuZhu_id as 户主号,HuZhu_name as 姓名,Sex as 性别,Birth as 出生年月,Nation as 民族,HuZhu.XiangZhen_id as 乡镇,Entrance_date as 参保时间,home as 家庭地址,politic as 政治面貌,ID as 身份证号,Job as 职位 from HuZhu,XiangZhen where XiangZhen.XiangZhen_id=HuZhu.XiangZhen_id and XiangZhen.XiangZhen_name=" + "'" + this.QryStuCla.SelectedItem.ToString().Trim() + "'";
UpdSconn=new SqlConnection(UpdStuconnstr);
UpdStuGrdsqlda=new SqlDataAdapter(UpdStustrconnClass,UpdSconn);
UpdClassStudset.Clear(); UpdStuGrdsqlda.Fill(UpdClassStudset,"HuZhu");
UpdStuGrdDg.DataSource=UpdClassStudset.Tables[0];
}
catch
{
MessageBox.Show("查询失败。","确认");
}
}
你设断点,看这串SQL在数据库里能跑通吗,估计是这个问题.
一、不该使用SqlCommandBuilder自动生成update和delete语句。
二、不该给查询出来的列随便取中文名,甚至改名都不行,因为修改了查询出来的列名后就无法使用SqlCommandBuilder自动生成update和delete语句,傻瓜的电脑不知道如何去对应列。