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);
}
更新数据可以执行,但是时候完全不执行,实在找不到问题