C# Adapter.update(Datatable)的适当配置是什么?
我有一个存储过程,可以插入一些记录,然后更新它C# Adapter.update(Datatable)的适当配置是什么?,c#,asp.net,sql-server,dataadapter,sqldataadapter,C#,Asp.net,Sql Server,Dataadapter,Sqldataadapter,我有一个存储过程,可以插入一些记录,然后更新它 CREATE PROCEDURE [dbo].[InsertSponsors] @Someparameters nvarchar(100), @Anotherparameter int, AS Begin DECLARE @ID int, @RowCount int insert into Clients (Name,Photo,PolicyID,BirthDay, Gender,Title,Nationalit
CREATE PROCEDURE [dbo].[InsertSponsors]
@Someparameters nvarchar(100),
@Anotherparameter int,
AS
Begin
DECLARE @ID int,
@RowCount int
insert into Clients (Name,Photo,PolicyID,BirthDay,
Gender,Title,Nationality,Relationship,ClassID,HRID,Active,
StartingDate,EndingDate,AddingDate,CreationOwner,UniqueID,PassportNo)
values (@Name,@Photo,@PolicyID,@Birthday,@Gendar,@Title,@Nationality,@RelationShip,
@ClassID,@HRID,@Active,@StartingDate,@EndingDate,@AddingDate,@CreationOwner,@UniqueID,@PassportNo)
SELECT @RowCount = @@ROWCOUNT;
Select @ID=SCOPE_IDENTITY();
update Clients set SponsorID=@ID where ID=@ID;
End
我从DataAdapter调用这个存储过程,如下所示
注意:我已经尝试了所有注释过的代码,但没有成功
internal static int UpdateInsertAdapter(string query,DataTable dt, SqlParameter[] sqlParameters, bool SP)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = openConnection();
cmd.CommandText = query;
if (SP)
{
cmd.CommandType = CommandType.StoredProcedure;
}
cmd.UpdatedRowSource = UpdateRowSource.None;
foreach (SqlParameter parameter in sqlParameters)
{
cmd.Parameters.Add(parameter);
}
SqlDataAdapter adpt = new SqlDataAdapter();
//adpt.AcceptChangesDuringFill = true;
//adpt.AcceptChangesDuringUpdate = true;
//SqlCommandBuilder cmdb = new SqlCommandBuilder(adpt);
//adpt.InsertCommand = cmdb.GetInsertCommand();
adpt.InsertCommand = cmd;
**//////Should i've select command to select the @RowCount**
adpt.UpdateBatchSize = 10;
int recordsInserted = adpt.Update(dt);
return recordsInserted;
}
注意:
这个数据表在我使用ExcelDataReader读取时被修改,然后我向该数据表添加了两个数据列
问题
如何批量插入Datatable并选择插入的行
在本文中,作者编写了一个存储过程来插入我可以插入然后更新吗
错误:
1.当传递带有修改行的DataRow集合时,更新需要有效的UpdateCommand
2.需要初始化DataAdapter.SelectCommand属性
更新
根据帮助,我找出了错误#1的原因,并通过用户使用SqlCommandBuilder找到了解决方案
SqlCommandBuilder cmdb = new SqlCommandBuilder(adpt);
adpt.InsertCommand = cmd;
adpt.UpdateCommand = new SqlCommandBuilder(adpt).GetUpdateCommand();
但是当我使用这些行时,会发生错误#2。如果您解释一下执行代码时实际发生的情况,我们可以更容易地缩小问题的范围。如果出现异常,则会出现一条错误消息,用于诊断目的。如果您想让我们诊断问题,逻辑要求您提供该信息。@jmcilhinney很抱歉,我没有把错误消息放进去。。我已经编辑了我的帖子。。。不管怎样,谢谢你的评论:)现在我们知道了错误消息,问题就变得显而易见了。在第一个示例中,这表示
数据表
包含RowState
为Modified
的行。如果您打算插入记录,那么您的行需要添加行状态。当您创建一行,然后将其添加到数据表的行集合中时,
RowState`默认设置为Added
。如果编辑现有行,RowState
设置为Modified
。关于第二条错误消息,在调用Update
时,还是在调用Fill
时,实际发生了该错误消息?除非您想通过调用Fill
来检索数据,否则不需要使用SelectCommand
。当您保存更改时,这是不相关的,您可以通过调用Update
@jmcilhinney来执行此操作。谢谢您的回复。我已经理解了问题1,但我可以在修改后更改行状态吗。对于问题2,我不会在任何地方调用Fill()。我已经更改了存储过程,删除了更新和选择部分,并创建了一个触发器来执行此任务。我的SP现在只插入了第二个错误,它仍然存在