代码:
string connstr = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"].ToString();
sqlconn = new SqlConnection(connstr);
SqlDataAdapter sd = new SqlDataAdapter("select top(1) * from " + tablename, sqlconn); //SqlCommandBuilder scb = new SqlCommandBuilder(sd);
string sql ="update " + tablename + " set FEndTime = @FEndTime,FEndState = @FEndState,FCanReason = @FCanReason,FRC2Ver=@FRC2Ver,FPorcessflag = @FPorcessflag where FOrderNo =@FOrderNo";
SqlCommand sqlcmd = new SqlCommand(sql,sqlconn);
sqlcmd.Parameters.Add("@FCanReason", SqlDbType.NVarChar, 200, "FCanReason");
sqlcmd.Parameters.Add("@FEndTime", SqlDbType.NVarChar, 20, "FEndTime");
sqlcmd.Parameters.Add("@FRC2Ver", SqlDbType.NVarChar, 50, "FRC2Ver");
sqlcmd.Parameters.Add("@FPorcessflag", SqlDbType.Int, 4, "FPorcessflag");
sqlcmd.Parameters.Add("@FEndState", SqlDbType.Int, 4, "FEndState");
sqlcmd.Parameters.Add("@FOrderNo", SqlDbType.NVarChar, 50, "FOrderNo"); sqlcmd.UpdatedRowSource = UpdateRowSource.OutputParameters;
sd.UpdateCommand = sqlcmd; sd.UpdateBatchSize = 100;
try
{
int f= sd.Update(UpdateDataTable); //执行到该行跳出 int t = f; // 执行不到这一行
}
catch (InvalidOperationException e)
{
}
string connstr = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"].ToString();
sqlconn = new SqlConnection(connstr);
SqlDataAdapter sd = new SqlDataAdapter("select top(1) * from " + tablename, sqlconn); //SqlCommandBuilder scb = new SqlCommandBuilder(sd);
string sql ="update " + tablename + " set FEndTime = @FEndTime,FEndState = @FEndState,FCanReason = @FCanReason,FRC2Ver=@FRC2Ver,FPorcessflag = @FPorcessflag where FOrderNo =@FOrderNo";
SqlCommand sqlcmd = new SqlCommand(sql,sqlconn);
sqlcmd.Parameters.Add("@FCanReason", SqlDbType.NVarChar, 200, "FCanReason");
sqlcmd.Parameters.Add("@FEndTime", SqlDbType.NVarChar, 20, "FEndTime");
sqlcmd.Parameters.Add("@FRC2Ver", SqlDbType.NVarChar, 50, "FRC2Ver");
sqlcmd.Parameters.Add("@FPorcessflag", SqlDbType.Int, 4, "FPorcessflag");
sqlcmd.Parameters.Add("@FEndState", SqlDbType.Int, 4, "FEndState");
sqlcmd.Parameters.Add("@FOrderNo", SqlDbType.NVarChar, 50, "FOrderNo"); sqlcmd.UpdatedRowSource = UpdateRowSource.OutputParameters;
sd.UpdateCommand = sqlcmd; sd.UpdateBatchSize = 100;
try
{
int f= sd.Update(UpdateDataTable); //执行到该行跳出 int t = f; // 执行不到这一行
}
catch (InvalidOperationException e)
{
}
解决方案 »
- 控制台应用程序简单的问题,分不多,求指点,急!
- 求助:MenustripItem下拉菜单的MOUSE事件
- 求高手!
- C# XMl文件问题
- windows应用程序 从datatable导出excel问题
- myReader["deliveryDate"].ToString().Trim ()怎么判断它是否为空,还有就是像这样的日期我怎么格式化啊
- 请帮忙看一下这C++到C#..
- textchanged 事件
- 为啥foreach 遍历不完datagridview中的数据(在线等)
- 关于c# 使用java的私钥进行加密字符串
- 求网站过滤的脏字
- 谁能说说ASP.NET Dynamic Data有什么用处?
SqlCommand sqlcmd = new SqlCommand(sql,sqlconn);修改了SQL语句,错误提示有新行,需要insertcommand
上述语句能否实现datatable中的数据在数据表中存在就修改,不存在不修改。
因为只需要更新操作,不需要插入,所以 sql:
string sql = "if exists (select FOrderNo from " + tablename + " where FOrderNo =@FOrderNo) update " + tablename + " set FCanReason = @FCanReason,FEndTime = @FEndTime,FRC2Ver=@FRC2Ver,FPorcessflag = @FPorcessflag, FEndState = @FEndState where FOrderNo =@FOrderNo";
SqlCommand sqlcmd = new SqlCommand(sql,sqlconn);试图避免修改时发现新的数据,但是这样的方法还是报错,请高手指教!!
除非你用SqlCommandBuilder scb = new SqlCommandBuilder(sd)才能根据SelectCommand推导出Insert与Update
我现在只需要修改数据,datatable中和数据库中都有的修改,datatable中有,数据表中没有的,不用修改。在线等,分不够,加
DataTable dtUpdateOnly = dt.GetChanges(DataRowState.Modified);
sd.Update(dtUpdateOnly );
现在把这些修改该的数据批量写到数据库中,数据库有的修改,没有的不修改。
楼上(ufo20020427)的方法不行。