예제 #1
0
        /// <summary>
        /// 得到数据表的数据类型
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static DataFieldTypeCollection GetDataStruct(DataTable dt)
        {
            DataFieldTypeCollection dtc = new DataFieldTypeCollection();

            foreach (DataColumn dc in dt.Columns)
            {
                DataFieldType t = new DataFieldType();
                t.FiledName          = dc.ColumnName.Trim().Replace("\r", "").Replace("\n", "");
                t.Length             = dc.MaxLength;
                t.FieldParameterName = $"@{t.FiledName}";

                string dataTypeName = dc.DataType.FullName.ToLower();
                if (dataTypeName.Contains("int"))
                {
                    t.Type = "int";
                }
                else if (dataTypeName.Contains("datetime"))
                {
                    t.Type = "datetime";
                }
                else
                {
                    t.Type = "string";
                }

                dtc.Add(t);
            }

            return(dtc);
        }
예제 #2
0
        /// <summary>
        /// 通过SQL语句获取所有列集合
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        private DataFieldTypeCollection GetDataFieldCollection(string sql)
        {
            //1 获取表结构并不获取数据
            DataTable table = null;

            try
            {
                DateTime baseTime = DateTime.Now.AddYears(10).Date;
                table = GetDataList(sql, baseTime, baseTime);

                if (table == null || table.Columns.Count == 0)
                {
                    throw new Exception($"创建SQLite数据库时,SQL语句[{sql}]查询数据库成功,但未获取到数据表列字段");
                }
            }
            catch (Exception ex)
            {
                throw new Exception($"创建SQLite数据库时,通过SQL语句[{sql}]查询数据库出现错误,异常信息[{ex.Message}][{ex.StackTrace}]");
            }

            //2 获取表字段集合
            DataFieldTypeCollection dataTypeCollection = SQLiteHelper.GetDataStruct(table);

            return(dataTypeCollection);
        }
예제 #3
0
        /// <summary>
        /// 构造Sqlite数据文件 SQL插入语句
        /// </summary>
        /// <param name="dataFieldTypes"></param>
        /// <returns></returns>
        public static string CreateInsertSql(DataFieldTypeCollection dataFieldTypes)
        {
            string fieldString         = string.Join(",", dataFieldTypes.Select(item => item.FiledName));
            string parameterNameString = string.Join(",", dataFieldTypes.Select(item => item.FieldParameterName));
            string insertSql           = $"insert into [mytable]({fieldString}) values({parameterNameString})";

            return(insertSql);
        }
예제 #4
0
        public bool OutputDataToSQLite(string sql, DateTime op, DateTime ed, string sqliteFileFullpath, string connect_string = null)
        {
            DataFieldTypeCollection dataFieldTypes = GetDataFieldCollection(sql);
            string sqliteConnString = SQLiteHelper.CreateSQLiteFileConnectionString(sqliteFileFullpath);

            SQLiteHelper.CreateDataBase(sqliteConnString, sqliteFileFullpath, dataFieldTypes);
            string insertSql = SQLiteHelper.CreateInsertSql(dataFieldTypes);

            ExecuteFor(c =>
            {
                using (SQLiteConnection targetconn = new SQLiteConnection(sqliteConnString))
                {
                    targetconn.Open();
                    using (SQLiteCommand targetcmd = new SQLiteCommand(insertSql, targetconn))
                    {
                        targetcmd.CommandText = insertSql;
                        c.QueryRawDataReader(r =>
                        {
                            foreach (DataFieldType type in dataFieldTypes)
                            {
                                if (type.Type.ToLower() == "datetime")
                                {
                                    //日期数据为空 则默认为 1899-12-30
                                    string dateTime = DateTime.Parse("1899-12-30").ToString("s");
                                    if (!string.IsNullOrEmpty(r[type.FiledName].ToString()))
                                    {
                                        dateTime = Convert.ToDateTime(r[type.FiledName].ToString()).ToString("s");
                                    }
                                    targetcmd.Parameters.Add(new SQLiteParameter(type.FieldParameterName, dateTime));
                                }
                                else
                                {
                                    targetcmd.Parameters.Add(new SQLiteParameter(type.FieldParameterName, r[type.FiledName].ToString()));
                                }
                            }

                            targetcmd.ExecuteNonQuery();
                            targetcmd.Parameters.Clear();
                        }, sql, new { StartTime = op, EndTime = ed });

                        targetcmd.Dispose();
                    }
                    targetconn.Close();
                }
            }, connect_string);
            return(true);
        }
예제 #5
0
        /// <summary>
        /// 创建数据库和表
        /// </summary>
        /// <param name="connectionString"></param>
        /// <param name="sqliteFileFullpath">数据库文件完整路径</param>
        /// <param name="dts"></param>
        public static void CreateDataBase(string connectionString, string sqliteFileFullpath, DataFieldTypeCollection dts)
        {
            if (CreateNewDatabase(sqliteFileFullpath) && dts != null)
            {
                StringBuilder sbCreateTableSql = new StringBuilder();
                sbCreateTableSql.Append("CREATE TABLE mytable (");
                foreach (DataFieldType dt in dts)
                {
                    sbCreateTableSql.Append(CreateColumn(dt) + ",");
                }
                sbCreateTableSql.Remove(sbCreateTableSql.Length - 1, 1);
                sbCreateTableSql.Append(")");


                using (SQLiteConnection conn = new SQLiteConnection(connectionString))
                {
                    conn.Open();

                    SQLiteCommand command = new SQLiteCommand(sbCreateTableSql.ToString(), conn);
                    command.ExecuteNonQuery();
                    command.Dispose();
                    conn.Close();
                }
            }
            else
            {
                throw new Exception($"SQLite数据库创建失败![{connectionString}]");
            }
        }