zoukankan      html  css  js  c++  java
  • 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
    View Code

    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("操作完成!");
            }
        }
    }
    View Code

    ---

    测试下自定义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("操作完成!");
            }
        }
    }
    View Code
  • 相关阅读:
    数据库规范化:闭包求解
    Django restframework解析器组件增加及源码分析
    Nuxt
    window环境下安装homestead后,共享文件夹无法共享文件
    30岁女IT月薪3W的背后:从数据报表到数仓、中台,这工具帮了大忙
    Markdown字体颜色、字号、大小修改(含颜色表)
    数据库规范化:函数依赖,三范式的区别
    数据库作业20:数据库恢复技术
    How Many Processes Should Be Set For The Receiving Transaction Manager (RTM)
    How to Create a Java Concurrent Program
  • 原文地址:https://www.cnblogs.com/wdfrog/p/15253864.html
Copyright © 2011-2022 走看看