菜菜吃菜 2022-04-23 11:04 采纳率: 57.5%
浏览 95
已结题

c#利用存储过程更新数据,更新部分数据可以更改,其余的不执行


 private void simpleButton17_Click(object sender, EventArgs e )
        {
            SqlConnection constr = new SqlConnection(detail);
            constr.Open();
           SqlCommand cmd = new SqlCommand();
            StringBuilder cuncu = new StringBuilder();
            StringBuilder creacu = new StringBuilder();
            SqlTransaction trans = null;
            /* 定义存储事务*/
            cuncu.Append("USE KJ ");
            cuncu.Append("IF EXISTS(SELECT * FROM sys.procedures WHERE name = 'UPK') DROP PROCEDURE UPK ");
            string cun = cuncu.ToString();
            cmd = new SqlCommand(cun, constr);
            cmd.ExecuteNonQuery();
            creacu.Append("CREATE PROC UPK @StatusID INT, @IOTime datetime, @UniqueId bigint, @DataFlag VARCHAR ( 50 ) AS ");
            creacu.Append("UPDATE DetailRealData20220401 SET DataFlag = @DataFlag,StatusID = @StatusID ");
            creacu.Append("WHERE UniqueId = @UniqueId AND DATEDIFF(ss, IOTime, @IOTime) = 0 ");
            string creacun = creacu.ToString();
            cmd = new SqlCommand(creacun, constr);
            cmd.ExecuteNonQuery();
            try
            { 
                cmd = new SqlCommand("UPK", constr);
                cmd.CommandType = CommandType.StoredProcedure;
                ///* 事务添加参数*/
                cmd.Parameters.Add("@StatusID", SqlDbType.Int);
                cmd.Parameters.Add("@IOTime", SqlDbType.DateTime);
                cmd.Parameters.Add("@UniqueId", SqlDbType.BigInt);
                cmd.Parameters.Add("@DataFlag", SqlDbType.VarChar, 50);
                trans = constr.BeginTransaction();
                cmd.Connection = constr;
                cmd.Transaction = trans;
                cmd.CommandTimeout = 60; //超时时间 秒
                                         // 最大数
                int max = Convert.ToInt32(textEdit6.Text);  //20
                // 最小数
                int min = Convert.ToInt32(textEdit7.Text);  //5

                // 要生成数的个数
                int digits = gridView9.SelectedRowsCount;  //30
                // 最小出现次数
               // MessageBox.Show(digits.ToString());
                int minOccurrences = 0;
                // 生成的数的集合
                var numbers = new List<int>();
                // 先确保从最大数到最小数递减至少都有一个数
                numbers.AddRange(Enumerable.Range(15, max - min + 1).SelectMany(x => Enumerable.Repeat(x, minOccurrences)));
                // 查看结果
                Console.WriteLine(string.Join(",", numbers));
                // 计算需要补位多少个数
                var fillGap = digits - (max - min + 1) * minOccurrences;
                Console.WriteLine($"需要补位{fillGap}个数");
                var random = new Random();
                // 生成补位的数
                for (var i = 0; i < fillGap; i++)
                {
                    numbers.Add(random.Next(min, max + 1));
                }

                numbers = numbers.OrderByDescending(x => x).ToList();
                Console.WriteLine($"生成的集合元素个数:{numbers.Count}");
                Console.WriteLine(string.Join(",", numbers));
                
                for (int k = 0; k < digits; k++)
                   {
                      double s = numbers[k];
                    
                       DataRow row = gridView9.GetDataRow(k);
                      string UniqueId = row[1].ToString();
                     string IOTime = row[7].ToString();
                      byte[] bytes = BitConverter.GetBytes(s);
                   string text =  bytes[0].ToString("X2") + bytes[1].ToString("X2") + bytes[2].ToString("X2") + bytes[3].ToString("X2") + bytes[4].ToString("X2") + bytes[5].ToString("X2") + bytes[6].ToString("X2") + bytes[7].ToString("X2") ; //转换为加密数
                   cmd.Parameters["@StatusID"].Value = "256";
                       cmd.Parameters["@IOTime"].Value = IOTime;
                      cmd.Parameters["@UniqueId"].Value = UniqueId;
                       cmd.Parameters["@DataFlag"].Value = "1";
                      cmd.ExecuteNonQuery();
                       
                      
                   }
                   trans.Commit();
                }
                catch(Exception ex)
                {
                    //执行异常时,通过事务回滚update操作
                   if (trans != null) trans.Rollback();

                }
                finally
                {
                Console.ReadLine();
                
                }
                
                simpleButton18_Click(sender, e);

            
           
        }

更新数据可以执行,但是时候完全不执行,实在找不到问题

  • 写回答

4条回答 默认 最新

  • 歇歇 2022-04-24 01:30
    关注

    IOTime between CONVERT(varchar,@IOTime, 120 )+".000" and CONVERT(varchar,@IOTime, 120 )+".999"
    试试上面条件或试试下面的,

    ALTER PROC UPKJ90Detail 
    @StatusID INT, 
    @IOTime datetime, 
    @UniqueId bigint, 
    @DataFlag VARCHAR ( 50 ) 
    AS 
    UPDATE DetailRealData20220401 
           SET DataFlag = @DataFlag,
                    StatusID = @StatusID
    WHERE UniqueId = @UniqueId 
          AND  IOTime between @IOTime and cast(CONVERT(varchar, getdate(), 23) +" 23:59:59" as datetime)
    
    
    

    查询语句

    
    select * from DetailRealData20220401 where UniqueId = @UniqueId 
          AND  IOTime between @IOTime and cast(CONVERT(varchar, getdate(), 23) +" 23:59:59" as datetime)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 赞助了问题酬金10元 4月24日
  • 赞助了问题酬金10元 4月23日
  • 展开全部

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题