Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Thick-Common
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
潘栩锋
Thick-Common
Commits
556f69da
Commit
556f69da
authored
Aug 29, 2020
by
潘栩锋
🚴
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'remotes/origin/master' into dev6.0
parents
abd54323
b3f2bc58
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
183 deletions
+28
-183
DBTable.cs
Project.SQLiteHelper/SQLiteHelper/DBTable.cs
+2
-7
IgnoreAttribute.cs
Project.SQLiteHelper/SQLiteHelper/IgnoreAttribute.cs
+0
-9
SQLiteHelper.cs
Project.SQLiteHelper/SQLiteHelper/SQLiteHelper.cs
+26
-167
No files found.
Project.SQLiteHelper/SQLiteHelper/DBTable.cs
View file @
556f69da
...
...
@@ -9,8 +9,6 @@ namespace SQLite
public
class
DBTable
<
T
>
:
IDBTable
where
T
:
new
()
{
public
List
<
SQLiteHelper
.
ArrayFieldTypeInfo
>
ArrayFieldTypeInfos
=
new
List
<
SQLiteHelper
.
ArrayFieldTypeInfo
>();
public
string
TableName
{
get
;
private
set
;
}
private
long
freeID
=
0
;
...
...
@@ -32,10 +30,7 @@ namespace SQLite
{
get
{
if
(
ArrayFieldTypeInfos
.
Count
()
==
0
)
return
ddl
;
else
return
SQLiteHelper
.
GetCreateTableCommandText
(
typeof
(
T
),
ArrayFieldTypeInfos
.
ToArray
());
return
ddl
;
}
}
...
...
@@ -81,7 +76,7 @@ namespace SQLite
sql
+=
" "
+
condition
;
DataTable
dataTable
=
sqliteHelper
.
ExecuteReader
(
sql
);
return
SQLiteHelper
.
ToObjs
<
T
>(
dataTable
,
ArrayFieldTypeInfos
.
ToArray
()
);
return
SQLiteHelper
.
ToObjs
<
T
>(
dataTable
);
}
/// <summary>
...
...
Project.SQLiteHelper/SQLiteHelper/IgnoreAttribute.cs
View file @
556f69da
...
...
@@ -11,15 +11,6 @@ namespace SQLite
}
}
public
class
BortherAttribute
:
Attribute
{
}
public
class
ChildAttribute
:
Attribute
{
}
public
class
PropertyIndexAttribute
:
Attribute
{
...
...
Project.SQLiteHelper/SQLiteHelper/SQLiteHelper.cs
View file @
556f69da
...
...
@@ -109,24 +109,6 @@ namespace SQLite
return
null
;
}
}
public
class
ArrayFieldTypeInfo
{
/// <summary>
/// 属性名
/// </summary>
public
string
PropertyName
{
get
;
set
;
}
/// <summary>
/// 数组大小
/// </summary>
public
int
Length
{
get
;
set
;
}
public
ArrayFieldTypeInfo
(
string
propertyname
,
int
length
)
{
PropertyName
=
propertyname
;
Length
=
length
;
}
}
public
static
string
GetTableName
(
Type
type
)
...
...
@@ -142,7 +124,7 @@ namespace SQLite
}
}
static
string
GetCreateTableCommandText_fieldText
(
Type
type
,
IEnumerable
<
ArrayFieldTypeInfo
>
arrayFieldTypeInfos
)
static
string
GetCreateTableCommandText_fieldText
(
Type
type
)
{
string
total_fieldtext
=
""
;
...
...
@@ -161,51 +143,15 @@ namespace SQLite
if
(
propertyIndex
!=
null
)
fieldText
.
index
=
propertyIndex
.
Index
;
//默认index=0
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
propertyInfo
.
PropertyType
);
string
text
=
""
;
text
+=
string
.
Format
(
"{0} {1}"
,
propertyInfo
.
Name
,
fieldTypeInfo
.
FieldType
);
//这个属性 下面的全部属性,是同一个表
if
(
propertyInfo
.
GetCustomAttributes
(
typeof
(
BortherAttribute
),
false
).
Count
()
>
0
)
{
//从arrayFieldTypeInfos 提取
string
startswith
=
propertyInfo
.
Name
+
"."
;
var
aftis
=
from
afti
in
arrayFieldTypeInfos
where
afti
.
PropertyName
.
StartsWith
(
startswith
)
select
new
ArrayFieldTypeInfo
(
afti
.
PropertyName
.
Substring
(
startswith
.
Length
),
afti
.
PropertyName
.
Length
);
fieldText
.
fieldtext
=
GetCreateTableCommandText_fieldText
(
propertyInfo
.
PropertyType
,
aftis
);
continue
;
}
if
(
propertyInfo
.
PropertyType
.
IsArray
)
//是数组,需要明确大小
{
int
length
=
arrayFieldTypeInfos
.
First
((
a
)
=>
a
.
PropertyName
==
propertyInfo
.
Name
).
Length
;
Type
elementType
=
propertyInfo
.
PropertyType
.
GetElementType
();
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
elementType
);
string
text
=
""
;
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
if
(
i
!=
0
)
text
+=
","
;
text
+=
string
.
Format
(
"{0}{1} {2}"
,
propertyInfo
.
Name
,
i
,
fieldTypeInfo
.
FieldType
);
}
fieldText
.
fieldtext
=
text
;
}
else
{
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
propertyInfo
.
PropertyType
);
string
text
=
""
;
text
+=
string
.
Format
(
"{0} {1}"
,
propertyInfo
.
Name
,
fieldTypeInfo
.
FieldType
);
//主键
if
(
propertyInfo
.
GetCustomAttributes
(
typeof
(
KeyAttribute
),
false
).
Count
()
>
0
)
text
+=
" PRIMARY KEY"
;
fieldText
.
fieldtext
=
text
;
}
//主键
if
(
propertyInfo
.
GetCustomAttributes
(
typeof
(
KeyAttribute
),
false
).
Count
()
>
0
)
text
+=
" PRIMARY KEY"
;
fieldText
.
fieldtext
=
text
;
}
//从小到大排序
fieldTexts
.
Sort
((
fieldTextIndex0
,
fieldTextIndex1
)
=>
...
...
@@ -227,11 +173,8 @@ namespace SQLite
}
return
total_fieldtext
;
}
public
static
string
GetCreateTableCommandText
(
Type
type
,
params
ArrayFieldTypeInfo
[]
arrayFieldTypeInfos
)
public
static
string
GetCreateTableCommandText
(
Type
type
)
{
if
(
arrayFieldTypeInfos
==
null
)
arrayFieldTypeInfos
=
new
ArrayFieldTypeInfo
[
0
];
//CREATE TABLE table_name(
//column1 datatype PRIMARY KEY,
//column2 datatype,
...
...
@@ -240,7 +183,7 @@ namespace SQLite
// columnN datatype,
//)
string
tablename
=
GetTableName
(
type
);
string
fieldtext
=
GetCreateTableCommandText_fieldText
(
type
,
arrayFieldTypeInfos
);
string
fieldtext
=
GetCreateTableCommandText_fieldText
(
type
);
string
commandText
=
string
.
Format
(
"CREATE TABLE {0} ({1})"
,
tablename
,
fieldtext
);
return
commandText
;
}
...
...
@@ -270,37 +213,10 @@ namespace SQLite
object
o
=
propertyInfo
.
GetValue
(
cell
,
null
);
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
propertyInfo
.
PropertyType
);
//这个属性 下面的全部属性,是同一个表
if
(
propertyInfo
.
GetCustomAttributes
(
typeof
(
BortherAttribute
),
false
).
Count
()
>
0
)
{
fieldText
.
fieldtext
=
GetInsertCommandText_fieldText
(
o
);
continue
;
}
if
(
propertyInfo
.
PropertyType
.
IsArray
)
//是数组,需要明确大小
{
Type
elementType
=
propertyInfo
.
PropertyType
.
GetElementType
();
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
elementType
);
Array
a
=
o
as
Array
;
string
text
=
""
;
for
(
int
i
=
0
;
i
<
a
.
Length
;
i
++)
{
if
(
i
!=
0
)
text
+=
","
;
text
+=
fieldTypeInfo
.
PtoS
(
a
.
GetValue
(
i
));
}
fieldText
.
fieldtext
=
text
;
}
else
{
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
propertyInfo
.
PropertyType
);
fieldText
.
fieldtext
=
fieldTypeInfo
.
PtoS
(
o
);
}
fieldText
.
fieldtext
=
fieldTypeInfo
.
PtoS
(
o
);
}
//从小到大排序
...
...
@@ -364,36 +280,12 @@ namespace SQLite
object
o
=
propertyInfo
.
GetValue
(
cell
,
null
);
//这个属性 下面的全部属性,是同一个表
if
(
propertyInfo
.
GetCustomAttributes
(
typeof
(
BortherAttribute
),
false
).
Count
()
>
0
)
{
fieldtext
+=
GetUpdateCommandText_fieldText
(
o
);
continue
;
}
if
(
propertyInfo
.
PropertyType
.
IsArray
)
//是数组,需要明确大小
{
Type
elementType
=
propertyInfo
.
PropertyType
.
GetElementType
();
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
elementType
);
Array
a
=
o
as
Array
;
for
(
int
i
=
0
;
i
<
a
.
Length
;
i
++)
{
if
(
i
!=
0
)
fieldtext
+=
","
;
fieldtext
+=
string
.
Format
(
"{0}{1} = {2}"
,
propertyInfo
.
Name
,
i
,
fieldTypeInfo
.
PtoS
(
a
.
GetValue
(
i
)));
}
}
else
{
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
propertyInfo
.
PropertyType
);
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
propertyInfo
.
PropertyType
);
fieldtext
+=
string
.
Format
(
"{0} = {1}"
,
propertyInfo
.
Name
,
fieldTypeInfo
.
PtoS
(
o
));
}
fieldtext
+=
string
.
Format
(
"{0} = {1}"
,
propertyInfo
.
Name
,
fieldTypeInfo
.
PtoS
(
o
));
}
return
fieldtext
;
...
...
@@ -421,19 +313,18 @@ namespace SQLite
return
commandText
;
}
public
static
List
<
T
>
ToObjs
<
T
>(
DataTable
dataTable
,
params
ArrayFieldTypeInfo
[]
arrayFieldTypeInfos
)
public
static
List
<
T
>
ToObjs
<
T
>(
DataTable
dataTable
)
where
T
:
new
()
{
Type
type
=
typeof
(
T
);
List
<
T
>
list
=
new
List
<
T
>();
foreach
(
DataRow
dataRow
in
dataTable
.
Rows
)
{
list
.
Add
(
ToObj
<
T
>(
dataRow
,
arrayFieldTypeInfos
));
list
.
Add
(
ToObj
<
T
>(
dataRow
));
}
return
list
;
}
static
void
SetObj
(
object
t
,
DataRow
dataRow
,
IEnumerable
<
ArrayFieldTypeInfo
>
arrayFieldTypeInfos
)
static
void
SetObj
(
object
t
,
DataRow
dataRow
)
{
Type
type
=
t
.
GetType
();
...
...
@@ -447,49 +338,17 @@ namespace SQLite
Type
ptype
=
propertyInfo
.
PropertyType
;
//这个属性 下面的全部属性,是同一个表
if
(
propertyInfo
.
GetCustomAttributes
(
typeof
(
BortherAttribute
),
false
).
Count
()
>
0
)
{
//从arrayFieldTypeInfos 提取
string
startswith
=
propertyInfo
.
Name
+
"."
;
var
aftis
=
from
afti
in
arrayFieldTypeInfos
where
afti
.
PropertyName
.
StartsWith
(
startswith
)
select
new
ArrayFieldTypeInfo
(
afti
.
PropertyName
.
Substring
(
startswith
.
Length
),
afti
.
PropertyName
.
Length
);
object
obj
=
propertyInfo
.
GetValue
(
t
,
null
);
SetObj
(
obj
,
dataRow
,
aftis
);
continue
;
}
if
(
ptype
.
IsArray
)
//是数组,需要明确大小
{
Type
elementType
=
propertyInfo
.
PropertyType
.
GetElementType
();
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
elementType
);
int
length
=
arrayFieldTypeInfos
.
First
((
a
)
=>
a
.
PropertyName
==
propertyInfo
.
Name
).
Length
;
Array
array
=
(
Array
)
ptype
.
Assembly
.
CreateInstance
(
ptype
.
FullName
,
false
,
BindingFlags
.
CreateInstance
,
null
,
new
object
[]
{
length
},
null
,
null
);
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
object
o
=
fieldTypeInfo
.
StoP
(
dataRow
[
propertyInfo
.
Name
+
i
]);
array
.
SetValue
(
o
,
i
);
}
propertyInfo
.
SetValue
(
t
,
array
,
null
);
}
else
{
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
ptype
);
object
o
=
fieldTypeInfo
.
StoP
(
dataRow
[
propertyInfo
.
Name
]);
propertyInfo
.
SetValue
(
t
,
o
,
null
);
}
SQLiteFieldTypeInfo
fieldTypeInfo
=
FieldTypeInfo
.
Find
((
fti
)
=>
fti
.
PropertyType
==
ptype
);
object
o
=
fieldTypeInfo
.
StoP
(
dataRow
[
propertyInfo
.
Name
]);
propertyInfo
.
SetValue
(
t
,
o
,
null
);
}
}
public
static
T
ToObj
<
T
>(
DataRow
dataRow
,
params
ArrayFieldTypeInfo
[]
arrayFieldTypeInfos
)
public
static
T
ToObj
<
T
>(
DataRow
dataRow
)
where
T
:
new
()
{
Type
type
=
typeof
(
T
);
T
t
=
new
T
();
SetObj
(
t
,
dataRow
,
arrayFieldTypeInfos
);
SetObj
(
t
,
dataRow
);
return
t
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment