示例#1
0
        public override int WriteToServer(IDataReader dataReader, int tolCount)
        {
            if (string.IsNullOrWhiteSpace(DestinationTableName))
            {
                throw new InvalidOperationException("目标表名称不能为空");
            }

            var schema = SchemaTable ?? GetSchemaTable();
            var buffer = CreateBuffer(schema.Rows.Count);

            var totalRows = 0;

            using (var command = GetInsertCommand(schema))
            {
                var count = 0;

                for (int i = 0; i < command.Parameters.Count; i++)
                {
                    command.Parameters[i].Value = buffer[i];
                }
                while (dataReader.Read())
                {
                    if (count == BatchSize)
                    {
                        command.ArrayBindCount = count;
                        command.ExecuteNonQuery();
                        count = 0;
                        var cashDatas = new CashHubDto();
                        cashDatas.Goal   = tolCount;
                        cashDatas.Raised = totalRows;
                        var context = GlobalHost.ConnectionManager.GetHubContext <CashHub>();
                        context.Clients.All.getMessage(cashDatas);
                    }

                    for (int i = 0; i < schema.Rows.Count; i++)
                    {
                        if (dataReader.IsDBNull(i))
                        {
                            buffer[i][count] = DBNull.Value;
                        }
                        else
                        {
                            try
                            {
                                buffer[i][count] = _convertor[command.Parameters[i].ParameterName](dataReader[i]);
                            }
                            catch (Exception ex)
                            {
                                throw new InvalidDataException("数据读取错误,行:{0},列{1}".FormatWith(dataReader.RecordsAffected, i), ex.GetBaseException());
                            }
                        }
                    }
                    ++count;
                    ++totalRows;
                }

                if (count > 0)
                {
                    command.ArrayBindCount = count;
                    command.ExecuteNonQuery();
                }
            }
            return(totalRows);
        }
示例#2
0
 public void Send(CashHubDto msg)
 {
     Clients.All.getMessage(msg);
 }