public async Task <DTOperationData> QueryByID(string storeGroupName, string hashInfo, Guid id) { string strConn = _transactionConnectionFactory.CreateAllForDTOperationData(); var(connNames, tableName) = await getStoreInfo(storeGroupName, hashInfo); if (connNames != null) { strConn = _transactionConnectionFactory.CreateAllForDTOperationData(connNames); } else { tableName = "DTOperationData"; } DTOperationData data = null; await DBTransactionHelper.SqlTransactionWorkAsync(DBTypes.SqlServer, true, false, strConn, async (conn, transaction) => { SqlTransaction sqlTran = null; if (transaction != null) { sqlTran = (SqlTransaction)transaction; } await using (SqlCommand commond = new SqlCommand() { Connection = (SqlConnection)conn, CommandType = CommandType.Text, Transaction = sqlTran, CommandText = string.Format(@"select {0} from {1} where [id]=@id", StoreHelper.GetDTOperationDataSelectFields(string.Empty), tableName) }) { var parameter = new SqlParameter("@id", SqlDbType.UniqueIdentifier) { Value = id }; commond.Parameters.Add(parameter); await commond.PrepareAsync(); SqlDataReader reader = null; await using (reader = await commond.ExecuteReaderAsync()) { if (await reader.ReadAsync()) { data = new DTOperationData(); StoreHelper.SetDTOperationDataSelectFields(data, reader, string.Empty); } await reader.CloseAsync(); } } }); return(data); }
/// <summary> /// 分布式操作数据实体的赋值 /// </summary> /// <param name="configuration"></param> /// <param name="reader"></param> /// <param name="prefix"></param> public static void SetDTOperationDataSelectFields(DTOperationData data, DbDataReader reader, string prefix) { data.ID = (Guid)reader[string.Format("{0}id", prefix)]; data.RecordUniqueName = reader[string.Format("{0}recorduniquename", prefix)].ToString(); data.Name = reader[string.Format("{0}name", prefix)].ToString(); data.Type = reader[string.Format("{0}type", prefix)].ToString(); data.Data = reader[string.Format("{0}data", prefix)].ToString(); data.StoreGroupName = reader[string.Format("{0}storegroupname", prefix)].ToString(); data.HashInfo = reader[string.Format("{0}hashinfo", prefix)].ToString(); data.Status = (int)reader[string.Format("{0}status", prefix)]; data.Version = (byte[])reader[string.Format("{0}version", prefix)]; data.CreateTime = (DateTime)reader[string.Format("{0}createtime", prefix)]; data.ModifyTime = (DateTime)reader[string.Format("{0}modifytime", prefix)]; }
public async Task Add(DTOperationData data) { string strConn = _transactionConnectionFactory.CreateAllForDTOperationData(); var(connNames, tableName) = await getStoreInfo(data.StoreGroupName, data.HashInfo); if (connNames != null) { strConn = _transactionConnectionFactory.CreateAllForDTOperationData(connNames); } else { tableName = "DTOperationData"; } await DBTransactionHelper.SqlTransactionWorkAsync(DBTypes.SqlServer, false, false, strConn, async (conn, transaction) => { SqlTransaction sqlTran = null; if (transaction != null) { sqlTran = (SqlTransaction)transaction; } await using (SqlCommand commond = new SqlCommand() { Connection = (SqlConnection)conn, CommandType = CommandType.Text, Transaction = sqlTran }) { if (data.ID == Guid.Empty) { commond.CommandText = string.Format(@"insert into {0}([id],[recorduniquename],[name],[type],[data],[storegroupname],[hashinfo],[createtime],[modifytime]) values(default,@recorduniquename,@name,@type,@data,@status,getutcdate(),getutcdate()); select @newid=[id] from {0} where [sequence]=SCOPE_IDENTITY()", tableName); } else { commond.CommandText = string.Format(@"insert into {0}([id],[recorduniquename],[name],[type],[data],[storegroupname],[hashinfo],[createtime],[modifytime]) values(@id,@recorduniquename,@name,@type,@data,@status,getutcdate(),getutcdate())", tableName); } SqlParameter parameter; if (data.ID != Guid.Empty) { parameter = new SqlParameter("@id", SqlDbType.UniqueIdentifier) { Value = data.ID }; commond.Parameters.Add(parameter); } else { parameter = new SqlParameter("@newid", SqlDbType.UniqueIdentifier) { Direction = ParameterDirection.Output }; commond.Parameters.Add(parameter); } parameter = new SqlParameter("@recorduniquename", SqlDbType.VarChar, 150) { Value = data.RecordUniqueName }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@name", SqlDbType.VarChar, 150) { Value = data.Name }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@type", SqlDbType.VarChar, 150) { Value = data.Type }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@data", SqlDbType.NVarChar, data.Data.Length) { Value = data.Data }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@storegroupname", SqlDbType.VarChar, 150) { Value = data.StoreGroupName }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@hashinfo", SqlDbType.VarChar, 300) { Value = data.HashInfo }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@status", SqlDbType.Int) { Value = data.Status }; commond.Parameters.Add(parameter); await commond.PrepareAsync(); await commond.ExecuteNonQueryAsync(); if (data.ID == Guid.Empty) { data.ID = (Guid)commond.Parameters["@newid"].Value; } } }); }
public async Task QueryByRecordUniqueName(string storeGroupName, string hashInfo, string recordUniqueName, int status, Func <DTOperationData, Task> action) { string strConn = _transactionConnectionFactory.CreateAllForDTOperationData(); var(connNames, tableName) = await getStoreInfo(storeGroupName, hashInfo); if (connNames != null) { strConn = _transactionConnectionFactory.CreateAllForDTOperationData(connNames); } else { tableName = "DTOperationData"; } List <DTOperationData> dataList = new List <DTOperationData>(); await DBTransactionHelper.SqlTransactionWorkAsync(DBTypes.SqlServer, true, false, strConn, async (conn, transaction) => { Int64?sequence = null; int pageSize = 500; while (true) { dataList.Clear(); SqlTransaction sqlTran = null; if (transaction != null) { sqlTran = (SqlTransaction)transaction; } await using (SqlCommand commond = new SqlCommand() { Connection = (SqlConnection)conn, CommandType = CommandType.Text, Transaction = sqlTran }) { if (!sequence.HasValue) { commond.CommandText = string.Format(@"select top (@pagesize) {0} from {1} where status=@status and recorduniquename=@recorduniquename order by [sequence]", StoreHelper.GetDTOperationDataSelectFields(string.Empty), tableName); } else { commond.CommandText = string.Format(@"select top (@pagesize) {0} from {1} where status=@status and recorduniquename=@recorduniquename and [sequence]>@sequence order by [sequence]", StoreHelper.GetDTOperationDataSelectFields(string.Empty), tableName); } var parameter = new SqlParameter("@status", SqlDbType.Int) { Value = status }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@recorduniquename", SqlDbType.VarChar, 150) { Value = recordUniqueName }; commond.Parameters.Add(parameter); parameter = new SqlParameter("@pagesize", SqlDbType.Int) { Value = pageSize }; commond.Parameters.Add(parameter); if (sequence.HasValue) { parameter = new SqlParameter("@sequence", SqlDbType.BigInt) { Value = sequence }; commond.Parameters.Add(parameter); } await commond.PrepareAsync(); SqlDataReader reader = null; await using (reader = await commond.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { var data = new DTOperationData(); StoreHelper.SetDTOperationDataSelectFields(data, reader, string.Empty); sequence = (Int64)reader["sequence"]; dataList.Add(data); } await reader.CloseAsync(); } } foreach (var dataItem in dataList) { await action(dataItem); } if (dataList.Count != pageSize) { break; } } }); }