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

请教:SqlDataSource代码设置UpdateCommand更新不成功

代码:
S2.UpdateCommand = "UPDATE [meun_db] SET [meun_name] = '33' WHERE [meun_id] = 'z1'" 
S2.Update()

以下是出错提示:
您已指定 更新 命令比较 SqlDataSource“S2”的所有值,但为 oldValues 传入的字典是空的。请为 更新 传入有效的字典或将模式更改为 OverwriteChanges。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 您已指定 更新 命令比较 SqlDataSource“S2”的所有值,但为 oldValues 传入的字典是空的。请为 更新 传入有效的字典或将模式更改为 OverwriteChanges。

--------------------编程问答-------------------- 直接用sqlcommand

Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand( "UPDATE [meun_db] SET [meun_name] = '33' WHERE [meun_id] = 'z1'" 
, connection)
        command.Connection.Open()
        command.ExecuteNonQuery()



  
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 

最新版本:20070130

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html --------------------编程问答-------------------- 谢谢,这个我知道,我现在就是想通过代码设置UpdateCommand 来实现. --------------------编程问答-------------------- 随便改一行纪录 --------------------编程问答-------------------- ???? --------------------编程问答-------------------- 怎么没有人知道吗? --------------------编程问答-------------------- 如果放在adapter中更新,就不能这样写了,要带参数的,以下是一个防止并发的更新
                cmd1 = New SqlClient.SqlCommand
                cmd1.Connection = Connection
                cmd1.CommandType = CommandType.Text
                cmd1.CommandText = "Update T_Bas_Area Set Ar_No = @dAr_No,Ar_Name = @dAr_Name,Ar_Level = @dAr_Level,Ar_FID = @dAr_FID,Ar_IsEnd = @dAr_IsEnd,Ar_Memo = @dAr_Memo Where (Ar_ID = @Original_dID ) And (Ar_No = @Original_dAr_No OR @Original_dAr_No Is Null And Ar_No Is Null)  And (Ar_Name = @Original_dAr_Name OR @Original_dAr_Name Is Null And Ar_Name Is Null)  And (Ar_Level = @Original_dAr_Level OR @Original_dAr_Level Is Null And Ar_Level Is Null)  And (Ar_FID = @Original_dAr_FID OR @Original_dAr_FID Is Null And Ar_FID Is Null)  And (Ar_IsEnd = @Original_dAr_IsEnd OR @Original_dAr_IsEnd Is Null And Ar_IsEnd Is Null)  And (Ar_Memo = @Original_dAr_Memo OR @Original_dAr_Memo Is Null And Ar_Memo Is Null) ;" & strSelect_Base & " WHERE (x.SelfState=0 And x.Ar_ID =@dID)"
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@dID", System.Data.SqlDbType.Int, 4, "dID"))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_dID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "dID", System.Data.DataRowVersion.Original, Nothing))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@dAr_No", System.Data.SqlDbType.VarChar, 50, "dAr_No"))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_dAr_No", System.Data.SqlDbType.VarChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "dAr_No", System.Data.DataRowVersion.Original, Nothing))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@dAr_Name", System.Data.SqlDbType.VarChar, 50, "dAr_Name"))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_dAr_Name", System.Data.SqlDbType.VarChar, 50, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "dAr_Name", System.Data.DataRowVersion.Original, Nothing))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@dAr_Level", System.Data.SqlDbType.TinyInt, 1, "dAr_Level"))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_dAr_Level", System.Data.SqlDbType.TinyInt, 1, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "dAr_Level", System.Data.DataRowVersion.Original, Nothing))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@dAr_FID", System.Data.SqlDbType.Int, 4, "dAr_FID"))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_dAr_FID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "dAr_FID", System.Data.DataRowVersion.Original, Nothing))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@dAr_IsEnd", System.Data.SqlDbType.TinyInt, 1, "dAr_IsEnd"))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_dAr_IsEnd", System.Data.SqlDbType.TinyInt, 1, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "dAr_IsEnd", System.Data.DataRowVersion.Original, Nothing))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@dAr_Memo", System.Data.SqlDbType.VarChar, 500, "dAr_Memo"))
                cmd1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_dAr_Memo", System.Data.SqlDbType.VarChar, 500, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "dAr_Memo", System.Data.DataRowVersion.Original, Nothing))

建议看一下sqlAdapter的相关文章 --------------------编程问答-------------------- 好晕呀!!!!
为什么我设置SqlDataSource的InsertCommand和SelectCommand都可以执行,而只有UpdateCommand执行不了呢? --------------------编程问答-------------------- UP --------------------编程问答-------------------- UP --------------------编程问答-------------------- SelectCommand无须参数是最容易设置,所以通常是极少出错的
InsertCommand参数较少,而且是单纯的插入,出错的也较少
UpdataCommand如果带并发检测就要涉及到datarow的OldVersion值,比较麻烦,把你的这里的代码较完整的贴出来看看,你问题中所示代码肯定不行。
--------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答-------------------- 其实很简单,就是把ConflictDetection="CompareAllValues" 改成ConflictDetection="OverwriteChanges"就行了,前者要求所有的列数据都改变 --------------------编程问答-------------------- 学习到了。
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,