当前位置:编程学习 > C#/ASP.NET >>

构建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();
--------------------编程问答--------------------
引用 3 楼 sdl2005lyx 的回复:
“SciInsertCMD.CommandText += "values(@VolumesNumber,@SerialNumber,@TotalValue,@ExamStateID,@ModifyTeacher)";

这种做法不合理!也不需要这么麻烦,用SqlCommandBuilder 会自动帮你建立InsertCommand的字符串,

C# code

SqlDataAdap……

是因为用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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,