今天在写一个SqlDataAdapter向数据库更新数据的Demo时,出现了这个错误,其实很好理解,还是一个细心的问题:
在往数据库里存储数据时,要注意字段的类型!!
而我的错误就是 一个字段是int 型,存储给的数据却是string类型,所以会报这样的错。。。(细心哟)
将参数值从 String 转换到 Decimal 失败。
//向插入命令添加参数
insertCmd.Parameters.Add("@id", SqlDbType.Int,4,"id");
insertCmd.Parameters.Add("@name", SqlDbType.NVarChar, 50, "name");
insertCmd.Parameters.Add("@subject", SqlDbType.NVarChar, 100, "subject");
insertCmd.Parameters.Add("@phone", SqlDbType.Money, 12, "phone");
insertCmd.Parameters.Add("@qq", SqlDbType.NVarChar, 50, "qq");
insertCmd.Parameters.Add("@mail", SqlDbType.NVarChar, 50, "mail");
//设置数据适配器的SelectCommand属性/InsertCommand
da.SelectCommand = selectCmd;
da.InsertCommand = insertCmd;
//创建数据集对象
DataSet data = new DataSet();
//使用数据适配器填充数据适配器
da.Fill(data, "message");
//向DataSet的“Books”表中添加一条记录
DataRow drNew = data.Tables["message"].NewRow();
//设置新添加行的值
drNew[0] = id; //这里字符串要转为int整型!!!!★★★★★
drNew[1] = phone;
drNew[2] = subject;
drNew[3] = phone;
drNew[4] = qq;
drNew[5] = mail;
改成这个即可:
drNew[0] = int.Parse(id);
但是,看我上面的代码,第二个地方需要注意,这个id不能是主键,理由不必多说,主键我在数据库设置了会自增的,不可人工添加!否则会报以下错误
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'message'中的标识列指定显式值。