ADO.net一些测试

-- 主健字段不考虑null情况,每次都带 -- 非主健考虑null情况, @IsNuull_xxxx=1 -- 所以一条记录加载后到提交时被别人修改了 --那么更新返回数应该是0-----报错{"违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。"} -- 导致同一批次的Insert语句也没挣钱执行 -- 先执行了更新语句,然后删除,最后插入 exec sp_executesql N' UPDATE [UEM_PrjDic] SET [Name] = @Name, [Img] = @Img WHERE ( ([RecId] = @Original_RecId) AND ((@IsNull_AddTime = 1 AND [AddTime] IS NULL) OR ([AddTime] = @Original_AddTime)) AND ((@IsNull_AddEmpNo = 1 AND [AddEmpNo] IS NULL) OR ([AddEmpNo] = @Original_AddEmpNo)) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)) AND ((@IsNull_Img = 1 AND [Img] IS NULL) OR ([Img] = @Original_Img)) ) ' , N'@Name nvarchar(8), @Img nvarchar(16), @Original_RecId bigint, @IsNull_AddTime int, @Original_AddTime datetime, @IsNull_AddEmpNo int, @Original_AddEmpNo nvarchar(4000), @IsNull_Name int, @Original_Name nvarchar(8), @IsNull_Img int, @Original_Img nvarchar(4000)', @Name=N'项目名称5108', @Img=N'ldeyzelg.dvu.jpg', @Original_RecId=4, @IsNull_AddTime=1, @Original_AddTime=NULL, @IsNull_AddEmpNo=1, @Original_AddEmpNo=NULL, @IsNull_Name=0, @Original_Name=N'项目名称6205', @IsNull_Img=1, @Original_Img=NULL
C#

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.IO; namespace ADO_Test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var connStr = @"data source=192.168.9.2;initial catalog=NewEC;persist security info=True;user id=sb;password=sbadmin;multipleactiveresultsets=True;persist security info=True;"; var sqlDa = new SqlDataAdapter("Select * from UEM_PrjDic", connStr); var cmdBuilder = new SqlCommandBuilder(sqlDa); var ds=new DataSet(); sqlDa.Fill(ds); #region 添加一行 var row = ds.Tables[0].NewRow(); row.SetField("Name", "项目2"); ds.Tables[0].Rows.Add(row); #endregion #region 删除最后第2行 var lastIndex = ds.Tables[0].Rows.Count -2; ds.Tables[0].Rows[lastIndex].Delete(); #endregion #region 更改行 var rnd=new Random(Environment.TickCount); ds.Tables[0].Rows[3]["Name"] = "项目名称" + rnd.Next(1, 10000); ds.Tables[0].Rows[3]["Img"] = Path.GetRandomFileName() + ".jpg"; #endregion //var changeDs = ds.GetChanges(); sqlDa.UpdateCommand = cmdBuilder.GetUpdateCommand(); sqlDa.DeleteCommand = cmdBuilder.GetDeleteCommand(); sqlDa.InsertCommand = cmdBuilder.GetInsertCommand(true); var updateSQL = sqlDa.UpdateCommand.CommandText; var insertSQL = sqlDa.InsertCommand.CommandText; var delSQL = sqlDa.DeleteCommand.CommandText; sqlDa.Update(ds); Console.WriteLine("操作完成!"); } } }
---
测试下自定义CURD 命令
SqlDataAdapter.Update 后更新RecId, 并返回RecId --自增长列更新问题

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.IO; namespace ADO_Test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var connStr = @"data source=192.168.9.2;initial catalog=NewEC;persist security info=True;user id=sb;password=sbadmin;multipleactiveresultsets=True;persist security info=True;"; var sqlDa = new SqlDataAdapter("Select * from UEM_PrjDic", connStr); var cmdBuilder = new SqlCommandBuilder(sqlDa); var ds=new DataSet(); sqlDa.Fill(ds); #region 添加一行 var row = ds.Tables[0].NewRow(); row.SetField("Name", "项目2x" + Guid.NewGuid().ToString()); ds.Tables[0].Rows.Add(row); #endregion #region 删除最后第2行 var lastIndex = ds.Tables[0].Rows.Count -2; ds.Tables[0].Rows[lastIndex].Delete(); #endregion #region 更改行 var rnd=new Random(Environment.TickCount); ds.Tables[0].Rows[3]["Name"] = "项目名称" + rnd.Next(1, 10000); ds.Tables[0].Rows[3]["Img"] = Path.GetRandomFileName() + ".jpg"; #endregion //var changeDs = ds.GetChanges(); sqlDa.UpdateCommand = cmdBuilder.GetUpdateCommand(); // sqlDa.UpdateCommand = new SqlCommand("Update UEM_PrjDic Set Name='@Name' where RecId=10" ); var nameParam=new SqlParameter(); nameParam.ParameterName="@Name"; nameParam.SourceColumn="Name"; nameParam.SourceVersion=DataRowVersion.Current; sqlDa.UpdateCommand.Parameters.Add(nameParam); sqlDa.DeleteCommand = cmdBuilder.GetDeleteCommand(); var insertCmd = new SqlCommand("INSERT INTO [UEM_PrjDic] ([AddTime], [AddEmpNo], [Name], [Img]) VALUES (@p1, @p2, @p3, @p4);select SCOPE_IDENTITY() as RecId"); //如果RecI->Name,会发现Name变成59 ,60... //sqlDa.InsertCommand = cmdBuilder.GetInsertCommand(); //sqlDa.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord; insertCmd.Parameters.Add(new SqlParameter(){ParameterName="@p1", SourceColumn = "AddTime" }); //参数名称@p1 insertCmd.Parameters.Add(new SqlParameter() { ParameterName = "@p2", SourceColumn = "AddEmpNo" }); insertCmd.Parameters.Add(new SqlParameter() { ParameterName = "@p3", SourceColumn = "Name" }); insertCmd.Parameters.Add(new SqlParameter() { ParameterName = "@p4", SourceColumn = "Img" }); sqlDa.InsertCommand = insertCmd; sqlDa.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord; var updateSQL = sqlDa.UpdateCommand.CommandText; var insertSQL = sqlDa.InsertCommand.CommandText; var delSQL = sqlDa.DeleteCommand.CommandText; sqlDa.Update(ds); dataGridView1.AutoGenerateColumns = true; bindingSource1.DataSource = ds; bindingSource1.DataMember = "Table"; Console.WriteLine("操作完成!"); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!