我在程序中通过计算得到的数据存储在dataset的一个table中,大约有50几万条数据,然后用DataAdapter的update方法更新到真实的数据库中,但每次没更新几条都出现“无效的参数量”这个错误,出现的还不规律,有时候更新几百条就出现这个错误,有时候可以更新几千条,这是怎么回事呢??高手帮忙,很急!!
解决方案 »
- C# WinForm做个照片编辑程序怎么给照片加相框
- 如何控制滚动条滑块大小?
- 一个100分的程序 十个90分的程序 50个80分的程序 哪种更效率?
- C#winform,access, 文本框为查询条件
- 装了vs2005后很多网页打开说找不到页面,删掉vs2005后那些网站又可以运行了(如csdn!),怎么会这样?
- 初学者,关于string.Length的问题
- 在线急求跳转到首页(WinForm)的问题等!
- 当鼠标划过gridview的行时,该行的字体能够变色,因为是超链接列,所以还要显示下划线,当鼠标离开是字体颜色恢复并看不见下划线,请大家
- 问一个很菜的问题,TreeView中的TreeNode的属性ID与NodeData有什么不同?
- c#新手面临的危机!·#¥%……—*
- div与selec的问题,急,在线等
- 又来C#读取INI问题
你可在更新前,设一个断点,查看一下DataTable里的数据,是否都是有效的数据.
{
OleDbDataAdapter ad = new OleDbDataAdapter();
DataSet ds = new DataSet();
ad.SelectCommand = new OleDbCommand("SELECT * FROM 土种代码库", con);
ad.Fill(ds, "土种代码库");
ad.SelectCommand = new OleDbCommand("SELECT * FROM 土种信息表", con);
ad.Fill(ds, "土种信息表");
ad.SelectCommand = new OleDbCommand("SELECT * FROM 分值规则表", con);
ad.Fill(ds, "分值规则表");
ad.SelectCommand = new OleDbCommand("SELECT * FROM 因子得分表", con);
ad.Fill(ds, "因子得分表");
//循环每块地的ID
for (int i = 0; i < ds.Tables["土种代码库"].Rows.Count; i++)
{
int ID = Convert.ToInt32(ds.Tables["土种代码库"].Rows[i]["id"]);
//循环用户选择的作物种类
for (int j = 0; j < kind.Length; j++)
{
if (kind[j] != null)
{
//计算该地块种这种作物时因子属性数据的得分
getCent(ID, kind[j], name);
}
}
}
OleDbCommandBuilder cbuilder = new OleDbCommandBuilder(ad);
ad.Update(ds, "因子得分表");
}
//计算因子属性数据的得分
public void getCent(int ID,string kind,string[] name)
{
DataRow[] dr = ds.Tables["土种代码库"].Select("id="+ID);
int tzdm=Convert.ToInt32(dr[0]["土种代码"]);//取得该地块的土种代码
DataRow[] drAttribute = ds.Tables["土种信息表"].Select("编号=" + tzdm);//取得该土种代码的因子属性值
DataRow MyRow = ds.Tables["因子得分表"].NewRow();
MyRow["id"] = ID;
MyRow["作物种类"] = kind;
for (int i = 0; i < name.Length; i++) //循环取得用户选择的因子的得分
{
if (name[i] != null)
{
string cName = name[i].ToString();
string value = drAttribute[0][cName].ToString();
DataRow[] drow = ds.Tables["分值规则表"].Select("作物种类='" + kind + "'");
for (int j = 0; j <drow.Length; j++)
{
string str = drow[j][cName].ToString();
if (str!="")
{
if (str == value)
{
MyRow[cName] = drow[j]["分值"];
break;
}
}
}
}
}
ds.Tables["因子得分表"].Rows.Add(MyRow);
}
ds2.Update();
{
DataRow[] dr = ds.Tables["土种代码库"].Select("id="+ID);
int tzdm=Convert.ToInt32(dr[0]["土种代码"]);//取得该地块的土种代码
DataRow[] drAttribute = ds.Tables["土种信息表"].Select("编号=" + tzdm);//取得该土种代码的因子属性值
DataRow MyRow = ds.Tables["因子得分表"].NewRow();
MyRow["id"] = ID;
MyRow["作物种类"] = kind;
for (int i = 0; i < name.Length; i++) //循环取得用户选择的因子的得分
{
if (name[i] != null)
{
string cName = name[i].ToString();
string value = drAttribute[0][cName].ToString();
DataRow[] drow = ds.Tables["分值规则表"].Select("作物种类='" + kind + "'");
for (int j = 0; j <drow.Length; j++)
{
string str = drow[j][cName].ToString();
if (str!="")
{
if (str == value)
{
MyRow[cName] = drow[j]["分值"];
break;
}
}
}
}
}
ds.Tables["因子得分表"].Rows.Add(MyRow);
}