C#-开源项目-DataPie-EXCEL导入、导出、存储过程运算工具
GridView控件
C#-DataTable遍历的方式
https://www.cnblogs.com/soany/p/5297400.html
DataTable dt = dataSet.Tables[0];
for(int i = 0 ; i < dt.Rows.Count ; i++)
{
string strName = dt.Rows[i]["字段名"].ToString();
}
foreach(DataRow myRow in myDataSet.Tables["temp"].Rows)
{
var str = myRow[0].ToString();
}
foeach(DataRow dr in dt.Rows)
{
object value = dr["ColumnsName"];
}
DataTable dt=new DataTable();
foreach(DataRow dr in dt.Rows)
{
for(int i=0;i<dt.Columns.Count;i++)
{
dr[i];
}
}
SQLServer-获取数据库中用户表所有列和列的数据类型
SELECT OBJECT_NAME(c.OBJECT_ID) AS [Table_Name], c.[name] AS [Column_Name] ,t.[name] AS [Data_Type_Name]
FROM sys.columns AS c
LEFT JOIN SYSOBJECTS AS s ON (c.[object_id] = s.[id])
LEFT JOIN sys.types AS t ON (c.[user_type_id]=t.[user_type_id])
WHERE s.xtype = 'U'
C# 如何获取SQL Server | SQLite中指定数据表的所有字段名和字段类型
我们继续研究SqlConnection.GetSchema 方法,
看看如何获取指定数据表的所有字段名和字段类型。
SqlConnection.GetSchema方法有2个重载形式,
获取指定数据表的所有字段名和字段类型的秘密就在
GetSchema (String, String[])的第二个参数中。
public override DataTable GetSchema(
string collectionName,
string[] restrictionValues
)
参数collectionName指定要返回的架构的名称,取值为静态类 SqlClientMetaDataCollectionNames的成员,
如果要取列信息,则取值为SqlClientMetaDataCollectionNames.Columns。
关于SqlClientMetaDataCollectionNames类成员的详细信息参见
参数restrictionValues为请求架构的一组限制值,对于不同的架构集类型,有不同的写法。要具体了解,可以调用GetSchema(“Restrictions”) 方法。
针对SQL Server 数据库,restrictionValues的长度为4,其中
restrictionValues[0]为Catalog(数据库名),
restrictionValues[1]为Owner(所有者),
restrictionValues[2]为Table(表名),
restrictionValues[3]为Column(列名)。
我们要查询某张表中的列名等信息,则可以通过设置restrictionValues[2]=”SomeTableName”来实现。
实现代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
namespace scratchline.cn
{
public struct Field
{
public string Name;
public string Type;
}
public class scratchline
{
public List<Field>GetFileds(string connectionString, string tableName)
{
List<Field> _Fields = new List<Field>();
SqlConnection _Connection = new SqlConnection(connectionString);
try
{
_Connection.Open();
string[] restrictionValues = new string[4];
restrictionValues[0] = null; // Catalog
restrictionValues[1] = null; // Owner
restrictionValues[2] = tableName; // Table
restrictionValues[3] = null; // Column
using (DataTable dt = _Connection.GetSchema(SqlClientMetaDataCollectionNames.Columns, restrictionValues))
{
foreach (DataRow dr in dt.Rows)
{
Field field;
field.Name = dr["column_name"].ToString();
field.Type = dr["data_type"].ToString();
_Fields.Add(field);
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
_Connection.Dispose();
}
return _Fields;
}
}
}
总结:SqlConnection.GetSchema方法用于获取数据库架构信息,通过不同参数的组合可实现各种数据架构信息的获取功能。
C#-如何确定SQL Server 中数据表是否存在
SQL Server数据库的表名等信息属于架构集合的一部分,
ADO.NET中的SqlConnection类包含的 GetSchema 方法用于获取支持的架构集合列表,
因此,要确定SQL Server 数据库中表是否存在是否存在,
可通过SqlConnection.GetSchema(“Tables”)来获得,
该方法返回一个DataTable,
DataTable中包含table_catalog、table_schema、table_name、table_type等4列,table_name列即为数据表名。
示例代码如下
/// <summary> /// 判断数据库中名为tableName的表是否存在
/// </summary>
/// <param name="tableName">要查询的表名</param>
/// <param name="connectionString">数据库连接字符串</param>
/// <returns></returns>
public bool Exist(string tableName, string connectionString)
{
bool bExist = false;
SqlConnection _Connection = new SqlConnection(connectionString);
try
{
_Connection.Open();
using (DataTable dt = _Connection.GetSchema("Tables"))
{
foreach (DataRow dr in dt.Rows)
{
if (string.Equals(tableName, dr[2].ToString()))
{
bExist = true;
break;
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
_Connection.Dispose();
}
return bExist;
}
要了解更多关于SQL Server架构集合的信息,可参看官方文档
VS2010-创建WindowsService服务
SQLite-导出脚本 获得元数据
如何导出/导入SQLite表数据到脚本文件?
关键字:sqlite C# 导出脚本
编程方式导出
命令方式导出
https://blog.csdn.net/u013600225/article/details/53898697
执行“sqlite3.exe”,我们可能用到下面几个命令:
sqlite>.help
可以查看命令的帮助信息
假设我们有一个SQLite数据库文件,名为db.sqlite3,这个数据库中有2个表,分别为tb1和tb2,
我们导出整个数据库到db.SQL文件的方式:
Use “.open FILENAME” to reopen on a persistent database.
sqlite> .open db.sqlite3
sqlite> .output db.SQL
sqlite> .dump
sqlite> .exit
我们导出表tb1到db.SQL文件的方式:
Use “.open FILENAME” to reopen on a persistent database.
sqlite>.open db.sqlite3
sqlite>.output db.SQL
sqlite>.dump tb1
sqlite>.exit
https://blog.csdn.net/sophiemantela/article/details/100772957
如何备份还原SQLite数据库?
可使用backup、restore和clone命令备份、恢复和复制SQLite数据库。
例如:
(1)备份数据库
—通过在命令行窗口下执行sqlite3.exe以重新建立和SQLite的连接。
sqlite3 test.db
sqlite> .backup ‘c:/test.db’
sqlite> .exit
(2)恢复数据库
sqlite3 test.db
sqlite> .restore ‘c:/test.db’
(3)复制数据库
sqlite3 test.db
sqlite>.clone ‘c:/newtest.db’
sqlite>.exit
编程实现
https://www.cnblogs.com/yaoxiaping/p/3770036.html
如何在EF中使用SQLite?
https://www.cnblogs.com/sdadx/p/7127098.html
如何读写SQLite-使用dataAdapter反向更新?
https://www.jb51.net/article/87974.htm
如何获取SQLite表的架构-表的字段名和字段类型?
https://www.cnblogs.com/wuhuacong/archive/2012/03/09/2387817.html
https://blog.csdn.net/MyNameIsXiaoLai/article/details/80883171
01—-查询sqlite中所有表
可用如下sql语句。原理是,sqlite中有一个内建表sqlite_master,这个表中存储这所有自建表的表名称等信息。
通过以下语句可查询出某个数据库的所有表名称信息
select name from sqlite_master where type=’table’ order by name;
02—-查询与判断列
通过以下语句可查询出某个表的所有字段信息
PRAGMA table_info([tablename])
比如:我想查看表StudentInfo的所有列信息,可以用下述代码。
PRAGMA table_info(StudentInfo)
Octopus-【思路】-jscode
jscode
//1.0 思路
//VH.PutSet(TagFields.PageName, PageName.Index);
//VContent.Put(TagFields.JsCode, VH.OutString(string.Concat(this.PcMobile, "common/_Self_Js.html"), true));
面临问题:以前的的代码只能放在页面的底部,虽然可以每个页面载入自己的代码,但是代码摆放的位置不够灵活
而且代码没有压缩功能。
还可能由于页面没有载入完全导致js代码执行起来有问题。看了下兰亭的网页,他们把大量的js代码,甚至JQuery库都输出在了页面上
后来想了一下为什么这样做?
可以减少不必要的js额外请求;不会因为库没有下载下来导致一些代码没有执行
实现要求:使用${jscode}标签在页面中的任意位置,输出该页面自定义的js代码,并提供对代码的压缩功能
第一个版本思路
NVelocity有一个助手,在初始化完成之后指定一个模板的名字,就可以输出这个模板的字符串,有了字符串就可以对字符串进行压缩处理
所以尝试了下
#region 代码
/*VelocityHelper vh = new VelocityHelper();
string pathTemplate = ConfigHelper.BaseDirectory + "themes\\" + ConfigManager.GetConfig().Theme
+ ConfigManager.GetConfig().PCthemeDir.Replace("/", "\\") + "common\\";
vh.Init(pathTemplate);
vh.PutSet(TagFields.PageName, PageName.Index);
string jsString = vh.OutString("_Self_Js.html");
VContent.Put("jsstring", ZipHtml.GZipHtml(jsString));*/
#endregion
第一:每个页面都要编写上面的代码增加了额外的开销
第二:麻烦
第三:手机模板和PC模板各自定义的js代码有可能不一样,所以_Self_Js.html不在同一个目录下,所以不行
第二个版本思路
尝试将VelocityHelper封装到页面的基类中去,变成一个静态的变量,这样不用增加额外的对象开销,而且内部的引擎不用做过多的初始化
在static HttpCustom()中尝试将其初始化,模板路径和HttpCustom路径保持一致,并且只初始化一次
这样在每个页面中 只需要调用就可以生成这个页面的js代码,同时传递了PcMobile目录,就可以为PC和Mobile生成各自的js代码 【比第一版的思路好多了】
VH.OutString(string.Concat(this.PcMobile, "common/vmjs.vm"), true)
坏处:每个页面都需要编写这个代码,代码还得需要编译
每个页面还需要PutSet这个页面的类型,才能动态的加载js代码
不灵活 也比较麻烦
第三版
既然可以在html中调用对象的方法,那么应该讲VH对象添加到数据上下文当中去
在html页面中调用这个方法
同时做进一步的封装string.Concat(this.PcMobile, “common/vmjs.vm”) 封装到 VH的内部处理
将PcMobile 封装成它的一个属性,在HttpCustom识别出访问设备,也就是PcMobile初始化之后
也将VH的PcMobile 初始化,如此一来
在页面中就可以这样调用
$VH.PutSet("pagename","index")
$VH.OutString(true)
好处:灵活了许多
pagename 不仅仅是系统中固定的那几个值了,可以自定义
而且可以自定义是否压缩js代码
到此完成!
总结:封装思想 确定需求