构建DataAdapter的insertcommand时越界,找不到哪里出错
准备吧窗体上的textbox中值插入到数据库,共30条记录datadable增加了以下列,
sciDT.Columns.Add("VolumesNumber", typeof(string));//
sciDT.Columns.Add("SerialNumber", typeof(string));
sciDT.Columns.Add("TotalValue", typeof(int));
sciDT.Columns.Add("ExamStateID", typeof(int));
sciDT.Columns.Add("ModifyTeacher", typeof(string));
循环赋值完能看到表中有三十条记录,
SciInsertCMD.CommandText = "Insert into studentScores2.DataStore(VolumesNumber,SerialNumber,TotalValue,ExamStateID,ModifyTeacher) ";
SciInsertCMD.CommandText += "values(@VolumesNumber,@SerialNumber,@TotalValue,@ExamStateID,@ModifyTeacher)";
SciInsertCMD.Parameters.Add(new ScimoreParameter("@VolumesNumber",ScimoreDbType.VarChar));
SciInsertCMD.Parameters["@VolumeNumber"].SourceVersion=DataRowVersion.Current;
SciInsertCMD.Parameters["@VolumeNumber"].SourceColumn="VolumesNumber";
(执行到这句出错)ciInsertCMD.Parameters["@VolumeNumber"].SourceVersion=DataRowVersion.Current;
错误提示是越界:Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
是在想不明白,求助各位达人~
--------------------编程问答-------------------- 你传的数值太大了,你的数据类型是什么?是不是long传到smallint里了 --------------------编程问答-------------------- 前面是参数写错了,修改后错误在update(DataTable)时候曝出,同样的越界 --------------------编程问答-------------------- “SciInsertCMD.CommandText += "values(@VolumesNumber,@SerialNumber,@TotalValue,@ExamStateID,@ModifyTeacher)";
”
这种做法不合理!也不需要这么麻烦,用SqlCommandBuilder 会自动帮你建立InsertCommand的字符串,
--------------------编程问答--------------------
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", connection);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
DataSet custDS = new DataSet();
connection.Open();
adapter.Fill(custDS, "Customers");
// 增删改后的数据都可以!
adapter.Update(custDS, "Customers");
connection.Close();
是因为用sqlcommandbuilder出错才想试试自己写insertcommand的,结果还是出错,之前用update都正确的
找到原因了,设了一个自增主键,操作时候没写 --------------------编程问答-------------------- 那有什么办法可以不用插入id主键的,只插入其他列 --------------------编程问答-------------------- sqlcommand的select 要写全,不能省略。。。结贴 --------------------编程问答-------------------- 那里把:
SciInsertCMD.CommandText = "Insert into studentScores2.DataStore(VolumesNumber,SerialNumber,TotalValue,ExamStateID,ModifyTeacher) ";
SciInsertCMD.CommandText += "values(@VolumesNumber,@SerialNumber,@TotalValue,@ExamStateID,@ModifyTeacher)";
哪个是主关键字的参数省去,后面的SciInsertCMD.Parameters也要省掉这个参数。。。。
补充:.NET技术 , C#