/// <summary>
/// 判断表是否存在,如不存在则创建表
/// </summary>
/// <param name="tableName"></param>
public static void creatTabel(string tableName)
{
//判断表是否存在
string sql = "SELECT COUNT(*) FROM sqlite_master where type='table' and name='"+tableName+"'";
SQLiteConnection conn = new SQLiteConnection(connectionString); //connectionString
SQLiteCommand cmd = new SQLiteCommand(sql, conn);
conn.Open();
int recordCount = (int)(Int64)cmd.ExecuteScalar(); //如果存在返回1,不存在返回0
if (recordCount==0)
{
sql = "CREATE TABLE " + tableName + "(username varchar(20),password varchar(20))";
cmd.CommandText = sql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
conn.Close();
}
在VS2010中运行以上代码会出现以下问题:
“混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在4.0 运行时中加载该程序集
今天在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0,同时准备进一步完善,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常:”
其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的System.Data.Sqlite这个数据访问provider是针对.NET2.0环境开发(最新的版本是1.0.66.0,2010年4月18日发布的),而目前官方也没有给出最新的.NET4的数据访问支持。
既然出现这个问题,那肯定是上GOOGLE搜索解决方案,毕竟微软不可能因为升级到了.NET4.0的程序无法访问.NET2.0的程序集吧。后来在著名的stackoverflow.com上果然找到了解决方案,就是在app.config中添加一个配置节:startup
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
(向项目添加 app.config 文件:
C#操作Sqlite快速入门及相关工具收集
Sqlite是不是那个System.Data.SQLite.DLL临时创建了数据库引擎?
1.新建一个WinForm项目,引用System.Data.SQLite.DLL.界面如下
![](https://i-blog.csdnimg.cn/blog_migrate/f145e0d28c0621905ca58ac68939330c.png)
1.1 SQLiteConnection.CreateFile(“D:/Data.db3”);
这样就可以创建一个数据库文件,名称随意。
封装成一个函数
// CreateDB("HyData.db3");
private void CreateDB( string dbName)
{
string databaseFileName = System.Environment.CurrentDirectory + @" /HyData/ " + dbName;
SQLiteConnection.CreateFile(databaseFileName);
}
1.2 数据库连接字符串
1.3 执行Sql语句
// 创建一个表: ExecuteSql("create table HyTest(TestID TEXT)");
// 插入些数据: ExecuteSql("insert into HyTest(TestID) values('1001')");
private void ExecuteSql( string sqlStr)
{
using (DbConnection conn = new SQLiteConnection(connStr))
{
conn.Open();
DbCommand comm = conn.CreateCommand();
comm.CommandText = sqlStr;
comm.CommandType = CommandType.Text;
comm.ExecuteNonQuery();
}
}
// ExecQuery("select * from HyTest");
private void ExecQuery( string sqlStr)
{
using (DbConnection conn = new SQLiteConnection(connStr))
{
conn.Open();
DbCommand comm = conn.CreateCommand();
comm.CommandText = sqlStr;
comm.CommandType = CommandType.Text;
using (IDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
MessageBox.Show(reader[ 0 ].ToString());
}
}
}
}
// 执行查询返回DataSet
private DataSet ExecDataSet( string sqlStr)
{
using (SQLiteConnection conn = new SQLiteConnection(connStr))
{
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = sqlStr;
cmd.CommandType = CommandType.Text;
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
本文示例项目源码:HySqlite.rar http://revit.5d6d.net/thread-799-1-1.html
2.Sqlite相关工具
2.1 Sqlite数据库可以到www.sqlite.org下载,非常小
或sqlite-shell-win32-x86-3070600.zip
http://revit.5d6d.net/thread-800-1-1.html
2.2 C#操作Sqlite的官方示例代码,一时忘了url
或http://revit.5d6d.net/thread-801-1-1.html包括
SQLite-1.0.66.0-source.zip
SQLite-1.0.66.0-binaries.zip
debug.rar
2.3 Sqlite两个界面工具
SQLiteExpertSetup.exe
http://revit.5d6d.net/thread-802-1-1.html这个比较好用,破解版
SQLite Database Browser.exe
http://revit.5d6d.net/thread-803-1-1.html这个据说用在手机上
2.4 小巧的界面工具SqliteSpy(感谢http://www.cnblogs.com/qq419524837/提供)
下载:SQLiteSpy或http://revit.5d6d.net/thread-808-1-1.html
//插入数据的另一种方法
//先创建表"CREATE TABLE user11(id int(4),name varchar(20),maxlevel int(4),east varchar(20))"
private void button5_Click(object sender, EventArgs e)
{
//string sql = "INSERT INTO user2 VALUES(1,'a','b',1.0)";
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into user11(");
strSql.Append("id,name,maxlevel,east)");//
strSql.Append(" values (");
strSql.Append("@ID,@name,@maxlevel,@east)");//
//
SQLiteParameter[] parameters = {
new SQLiteParameter("@ID", TypeAffinity.Text),
new SQLiteParameter("@name", TypeAffinity.Text),
new SQLiteParameter("@maxlevel", TypeAffinity.Int64),
new SQLiteParameter("@east", TypeAffinity.Double)
};
parameters[0].Value = 123;
parameters[1].Value = "name";
parameters[2].Value = 111;
double ddd = 1.0;
parameters[3].Value = ddd; //ddd.ToString();
ExecuteSql(strSql.ToString(), parameters);
//cmd.CommandText = sql;
//cmd.Connection = conn;
//cmd.ExecuteNonQuery();
MessageBox.Show("添加数据成功");
}
/// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString, params SQLiteParameter[] cmdParms)
{
using (SQLiteConnection connection = new SQLiteConnection("Data Source=e:\\test1.db;Version=3"))
{
using (SQLiteCommand cmd = new SQLiteCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.SQLite.SQLiteException E)
{
throw new Exception(E.Message);
}
}
}
}
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans, string cmdText, SQLiteParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
//if (cmdParms != null) //用此方法出错:“输入字符串的格式不正确”(在执行cmd.ExecuteNonQuery();时)
//{
// foreach (SQLiteParameter parm in cmdParms)
// cmd.Parameters.Add(parm);
//}
cmd.Parameters.AddWithValue("@ID", cmdParms[0].Value);
cmd.Parameters.AddWithValue("@name", cmdParms[1].Value);
cmd.Parameters.AddWithValue("@maxlevel", cmdParms[2].Value);
cmd.Parameters.AddWithValue("@east", cmdParms[3].Value);
}
sql="create table tablename (m_id integer identity(1,1) primary key,编号 varchar(10),日期 date, 时间 date)"
Conn.ExeCute(SQL)
怎样让tablename使用变量
tablename =Request.QueryString("tname")
sql="create table " & tablename & " (m_id integer identity(1,1) primary key,编号 varchar(10),日期 date, 时间 date)"
CREATE TABLE Persons(Id_P int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))
c#与SQL类型转换
数据库 | C#程序 |
int | int32 |
text | string |
bigint | int64 |
binary | System.Byte[] |
bit | Boolean |
char | string |
datetime | System.DateTime |
decimal | System.Decimal |
float | System.Double |
image | System.Byte[] |
money | System.Decimal |
nchar | String |
ntext | String |
numeric | System.Decimal |
nvarchar | String |
real | System.Single |
smalldatetime | System.DateTime |
smallint | Int16 |
smallmoney | System.Decimal |
timestamp | System.DateTime |
tinyint | System.Byte |
varbinary | System.Byte[] |
varchar | String |
Variant | Object |
unique identifier | System.Guid |