Exemple #1
0
        public void BuildWhereClause(OleDbCommand cmd, ObjectState objState)
        {
            StringBuilder builder            = new StringBuilder();
            List <ExcelColumnAttribute> cols = ExcelMapReader.GetColumnList(objState.Entity.GetType());

            foreach (ExcelColumnAttribute col in cols)
            {
                PropertyManager pm = objState.GetProperty(col.GetProperty().Name);
                if (builder.Length > 0)
                {
                    builder.Append(" and ");
                }

                builder.AppendFormat("[{0}]", col.GetSelectColumn());
                //fix from Andrew 4/2/08 to handle empty cells
                if (pm.OrginalValue == System.DBNull.Value)
                {
                    builder.Append(" IS NULL");
                }
                else
                {
                    builder.Append(" = ");
                    string paraNum = "@x" + cmd.Parameters.Count.ToString();
                    builder.Append(paraNum);
                    OleDbParameter para = new OleDbParameter(paraNum, pm.OrginalValue);
                    cmd.Parameters.Add(para);
                }
            }
            cmd.CommandText = cmd.CommandText + " WHERE " + builder.ToString();
        }
Exemple #2
0
        public void BuildUpdateClause(OleDbCommand cmd, ObjectState objState)
        {
            StringBuilder builder = new StringBuilder();
            string        sheet   = ExcelMapReader.GetSheetName(objState.Entity.GetType());

            builder.Append("UPDATE [");
            builder.Append(sheet);
            builder.Append("$] SET ");
            StringBuilder changeBuilder             = new StringBuilder();
            List <ExcelColumnAttribute> cols        = ExcelMapReader.GetColumnList(objState.Entity.GetType());
            List <ExcelColumnAttribute> changedCols =
                (from c in cols
                 join p in objState.ChangedProperties on c.GetProperty().Name equals p.PropertyName
                 where p.HasChanged == true
                 select c).ToList();

            foreach (ExcelColumnAttribute col in changedCols)
            {
                if (changeBuilder.Length > 0)
                {
                    changeBuilder.Append(", ");
                }
                string paraNum = "@x" + cmd.Parameters.Count.ToString();
                changeBuilder.AppendFormat("[{0}]", col.GetSelectColumn());
                changeBuilder.Append(" = ");
                changeBuilder.Append(paraNum);
                object         val  = col.GetProperty().GetValue(objState.Entity, null);
                OleDbParameter para = new OleDbParameter(paraNum, val);
                cmd.Parameters.Add(para);
            }
            builder.Append(changeBuilder.ToString());
            cmd.CommandText = builder.ToString();
            BuildWhereClause(cmd, objState);
        }
Exemple #3
0
        public void BuildInsertClause(OleDbCommand cmd, ObjectState objState)
        {
            string        sheet   = ExcelMapReader.GetSheetName(objState.Entity.GetType());
            StringBuilder builder = new StringBuilder();

            builder.Append("INSERT INTO [");
            builder.Append(sheet);
            builder.Append("$]");
            StringBuilder columns = new StringBuilder();
            StringBuilder values  = new StringBuilder();

            foreach (ExcelColumnAttribute col in ExcelMapReader.GetColumnList(objState.Entity.GetType()))
            {
                if (columns.Length > 0)
                {
                    columns.Append(", ");
                    values.Append(", ");
                }
                columns.AppendFormat("[{0}]", col.GetSelectColumn());
                string paraNum = "@x" + cmd.Parameters.Count.ToString();
                values.Append(paraNum);
                object         val  = col.GetProperty().GetValue(objState.Entity, null);
                OleDbParameter para = new OleDbParameter(paraNum, val);
                cmd.Parameters.Add(para);
            }
            cmd.CommandText = builder.ToString() + "(" + columns.ToString() + ") VALUES (" +
                              values.ToString() + ")";
        }
Exemple #4
0
        public void BuildDeleteClause(OleDbCommand cmd, ObjectState objState)
        {
            StringBuilder builder = new StringBuilder();
            string        sheet   = ExcelMapReader.GetSheetName(objState.Entity.GetType());

            builder.Append("DELETE FROM [");
            builder.Append(sheet);
            builder.Append("$]");
            cmd.CommandText = builder.ToString();
            BuildWhereClause(cmd, objState);
        }
Exemple #5
0
        private string BuildSelect()
        {
            string        sheet   = ExcelMapReader.GetSheetName(typeof(T));
            StringBuilder builder = new StringBuilder();

            foreach (ExcelColumnAttribute col in ExcelMapReader.GetColumnList(typeof(T)))
            {
                if (builder.Length > 0)
                {
                    builder.Append(", ");
                }
                builder.AppendFormat("[{0}]", col.GetSelectColumn());
            }
            builder.Append(" FROM [");
            builder.Append(sheet);
            builder.Append("$]");
            return("SELECT " + builder.ToString());
        }
Exemple #6
0
        private void Load()
        {
            string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties= ""Excel 8.0;HDR=YES;IMEX=1""";

            if (provider.Filepath.EndsWith(".xlsx"))
            {
                connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties= ""Excel 8.0;HDR=YES;IMEX=1""";
            }
            connectionString = string.Format(connectionString, provider.Filepath);
            List <ExcelColumnAttribute> columns = ExcelMapReader.GetColumnList(typeof(T));

            rows.Clear();
            if (!File.Exists(provider.Filepath))
            {
                //创建新的Excel文件
                Object            oMissing = System.Reflection.Missing.Value;
                Excel.Application excel    = new Excel.Application();
                excel.Visible = false;
                Excel.Workbook  workbook  = excel.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
                Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
                for (int i = 1; i <= columns.Count; i++)
                {
                    worksheet.Cells[1, i] = columns[i - 1].GetSelectColumn();
                }
                // 如果是Excel 2007
                if (excel.Version == "12.0")
                {
                    // 保存为Excel 2003 兼容格式
                    worksheet.SaveAs(provider.Filepath, Excel.XlFileFormat.xlExcel8, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                }
                else
                {
                    worksheet.SaveAs(provider.Filepath, Excel.XlFileFormat.xlXMLSpreadsheet, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                }
                excel.Application.DisplayAlerts = false;
                excel.Quit();
                worksheet = null;
                workbook  = null;
                excel     = null;
                GC.Collect();
            }
            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                using (OleDbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = BuildSelect();
                    using (OleDbDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            T item = CreateInstance();
                            List <PropertyManager> pm = new List <PropertyManager>();
                            int    Colcount           = 1;
                            object tempVal            = null;
                            foreach (ExcelColumnAttribute col in columns)
                            {
                                object val = reader[col.GetSelectColumn()];
                                tempVal = val;
                                if (Colcount == 1 && tempVal.ToString() == "")
                                {
                                    break;
                                }

                                if (col.IsFieldStorage())
                                {
                                    FieldInfo fi = typeof(T).GetField(col.GetStorageName(), BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField);
                                    try
                                    {
                                        fi.SetValue(item, val);
                                    }
                                    catch (Exception ex)
                                    {
                                        if (fi.FieldType == typeof(string))
                                        {
                                            fi.SetValue(item, Convert.ToString(val));
                                        }
                                        if (fi.FieldType == typeof(double))
                                        {
                                            try
                                            {
                                                fi.SetValue(item, Convert.ToDouble(val));
                                            }
                                            catch (Exception)
                                            {
                                                fi.SetValue(item, Convert.ToDouble(0));
                                            }
                                        }
                                        if (fi.FieldType == typeof(DateTime))
                                        {
                                            fi.SetValue(item, Convert.ToDateTime(val));
                                        }
                                        if (fi.FieldType == typeof(int))
                                        {
                                            try
                                            {
                                                fi.SetValue(item, Convert.ToInt32(val));
                                            }
                                            catch (Exception)
                                            {
                                                fi.SetValue(item, Convert.ToInt32(0));
                                            }
                                        }
                                        if (fi.FieldType == typeof(decimal))
                                        {
                                            try
                                            {
                                                fi.SetValue(item, Convert.ToDecimal(val));
                                            }
                                            catch (Exception)
                                            {
                                                fi.SetValue(item, Convert.ToDecimal(0));
                                            }
                                        }
                                        if (fi.FieldType == typeof(decimal?))
                                        {
                                            try
                                            {
                                                fi.SetValue(item, Convert.ToDecimal(val));
                                            }
                                            catch (Exception)
                                            {
                                                fi.SetValue(item, Convert.ToDecimal(0));
                                            }
                                        }
                                        if (fi.FieldType == typeof(bool))
                                        {
                                            fi.SetValue(item, Convert.ToBoolean(Convert.ToInt32(val)));
                                        }
                                    }
                                }
                                else
                                {
                                    typeof(T).GetProperty(col.GetStorageName()).SetValue(item, val, null);
                                }
                                pm.Add(new PropertyManager(col.GetProperty().Name, val));
                                Colcount++;
                            }
                            if (Colcount == 1 && tempVal.ToString() == "")
                            {
                                continue;
                            }
                            rows.Add(item);
                            AddToTracking(item, pm);
                        }
                    }
                }
            }
        }