DATAGRID更新数据库的怪问题。寻求解决。
有一个奇怪问题,datagrid只有第一行可以正常更新,其余行都报错。错误信息如下:
System.FormatException: 输入字符串的格式不正确。
源错误:
行 120: try
行 121: {
行 122: myCommand.ExecuteNonQuery();
行 123: Message.InnerHtml = "<b>已更新记录</b><br>" + updateCmd;
行 124: DataGrid1.EditItemIndex = -1;
源文件: E:\dbserver\jhgl.aspx 行: 122
public void DataGrid1_Update(Object sender, DataGridCommandEventArgs e)
{
String updateCmd = "UPDATE temp SET id=@id,分类代码= @fldm, 统一编号 = @tybh, 分类编号 = @flbh, 名称 = @mc,型号=@xh, 测量范围 =@clfw, 准确度=@zqd, 生产厂家=@sccj, "
+ "出厂编号 = @ccbh, 出厂日期 = @ccrq, 使用部门 = @sybm, 使用人 = @syr, 管理状态 = @glzt, 检定部门=@jdbm, 检定周期=@jdzq, 检定日期=@jdrq, 有效日期=@yxrq,"
+ "检定结果=@jdjg,周检档案=@zjda,备注=@bz, 使用地点=@sydd,数量=@sl,提交日期=@tjrq,审核=@sh,更新标志=@gxbz where id = @id";
SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);
myCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.NVarChar,4));
myCommand.Parameters.Add(new SqlParameter("@fldm", SqlDbType.NChar, 10));
myCommand.Parameters.Add(new SqlParameter("@tybh", SqlDbType.NChar, 8));
myCommand.Parameters.Add(new SqlParameter("@flbh", SqlDbType.NChar, 3));
myCommand.Parameters.Add(new SqlParameter("@mc", SqlDbType.NChar, 20));
myCommand.Parameters.Add(new SqlParameter("@xh", SqlDbType.NChar, 12));
myCommand.Parameters.Add(new SqlParameter("@clfw", SqlDbType.NChar, 22));
myCommand.Parameters.Add(new SqlParameter("@zqd", SqlDbType.NChar, 10));
myCommand.Parameters.Add(new SqlParameter("@sccj", SqlDbType.NChar, 16));
myCommand.Parameters.Add(new SqlParameter("@ccbh", SqlDbType.NChar,10));
myCommand.Parameters.Add(new SqlParameter("@ccrq", SqlDbType.NChar,4));
myCommand.Parameters.Add(new SqlParameter("@sybm", SqlDbType.NChar,2));
myCommand.Parameters.Add(new SqlParameter("@syr", SqlDbType.NChar,8));
myCommand.Parameters.Add(new SqlParameter("@glzt", SqlDbType.NChar,2));
myCommand.Parameters.Add(new SqlParameter("@jdbm", SqlDbType.NChar,2));
myCommand.Parameters.Add(new SqlParameter("@jdzq", SqlDbType.Int,4));
myCommand.Parameters.Add(new SqlParameter("@jdrq", SqlDbType.NChar,6));
myCommand.Parameters.Add(new SqlParameter("@yxrq", SqlDbType.NChar,6));
myCommand.Parameters.Add(new SqlParameter("@jdjg", SqlDbType.NChar,2));
myCommand.Parameters.Add(new SqlParameter("@zjda", SqlDbType.NChar,4));
//myCommand.Parameters.Add(new SqlParameter("@abc", SqlDbType.NChar,1));
myCommand.Parameters.Add(new SqlParameter("@bz", SqlDbType.NChar,30));
myCommand.Parameters.Add(new SqlParameter("@sydd", SqlDbType.NChar,18));
myCommand.Parameters.Add(new SqlParameter("@sl", SqlDbType.Int,4));
myCommand.Parameters.Add(new SqlParameter("@tjrq", SqlDbType.NChar,10));
myCommand.Parameters.Add(new SqlParameter("@sh", SqlDbType.NChar,16));
myCommand.Parameters.Add(new SqlParameter("@gxbz", SqlDbType.NChar,10));
myCommand.Parameters["@id"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
String[] cols = {"@id","@fldm","@tybh","@flbh", "@mc", "@xh","@clfw","@zqd","@sccj","@ccbh","@ccrq","@sybm","@syr", "@glzt", "@jdbm","@jdzq","@jdrq", "@yxrq","@yxrq","@jdjg","@zjda","@bz","@sydd","@sl","@tjrq","@sh","@gxbz"};
int numCols = e.Item.Cells.Count;
for (int i=3; i<numCols; i++)
{
String colvalue =((TextBox)e.Item.Cells[i].Controls[0]).Text;
myCommand.Parameters[cols[i-2]].Value = colvalue;
}
myCommand.Connection.Open();
try
{
myCommand.ExecuteNonQuery();
Message.InnerHtml = "<b>已更新记录</b><br>" + updateCmd;
DataGrid1.EditItemIndex = -1;
}
catch (SqlException exc)
{
if (exc.Number == 2627)
Message.InnerHtml = "错误:已存在具有相同主键的记录";
else
Message.InnerHtml = "错误:未能更新记录,请确保正确填写了字段";
Message.Style["color"] = "red";
}
myCommand.Connection.Close();
retrunview();
DataGrid1.DataSource = result;
DataGrid1.DataBind();
}