请教: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