您的当前位置:首页正文

c#简单的SQLHelp

2023-11-10 来源:画鸵萌宠网

abstract class SQLHelper { //只读的静态数据库连接字符串 //需添加引用System.Configuration; public static readonly string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; //public static readonly string connString = "server=.;database=Weight;uid=sa;pwd=1"; #region 执行 增 删 改 /// <summary> /// 执行 增 删 改 /// </summary> /// <param name="sql">要执行的SQL</param> /// <param name="param">参数</param> /// <returns>影响行数</returns> public static int ExecuteNonQuery(string sql, params SqlParameter[] param) { //实例化连接对象,并指定连接字符串,自动释放资源,不用关闭 using (SqlConnection conn = new SqlConnection(connString)) { //实例化命令对象,指定sql,与连接对象 using (SqlCommand cmd = new SqlCommand(sql, conn)) { //如果有参数 if (param != null) { //批量添加参数 cmd.Parameters.AddRange(param); } //打开连接 conn.Open(); //执行sql并返回影响行数 return cmd.ExecuteNonQuery(); } } } /// <summary> /// 返回首行首列对象 /// </summary> /// <param name="sql">要执行的SQL</param> /// <param name="param">参数</param> /// <returns>首行首列对象</returns> public static object ExecuteScalar(string sql, params SqlParameter[] param) { //实例化连接对象,并指定连接字符串,自动释放资源,不用关闭 using (SqlConnection conn = new SqlConnection(connString)) { //实例化命令对象,指定sql,与连接对象 using (SqlCommand cmd = new SqlCommand(sql, conn)) { //如果有参数 if (param != null) { //批量添加参数 cmd.Parameters.AddRange(param); } //打开连接 conn.Open(); //执行sql并返回影响行数 return cmd.ExecuteScalar(); } } } #endregion #region 执行 查询 /// <summary> /// 执行 查询 /// </summary> /// <param name="sql">要执行的SQL</param> /// <param name="param">参数</param> /// <returns>数据集</returns> public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] param) { //实例化连接对象,并指定连接字符串 SqlConnection conn = new SqlConnection(connString); //实例化命令对象,指定sql,与连接对象 using (SqlCommand cmd = new SqlCommand(sql, conn)) { //如果有参数 if (param != null) { //批量添加参数 cmd.Parameters.AddRange(param); } //打开连接 conn.Open(); //执行sql并返回一个只进只读保持SQL连接的结果集,如果将返回的SqlDataReader关闭时也将关闭连接 return cmd.ExecuteReader(CommandBehavior.CloseConnection); } } #endregion #region 完成数据的查询,返回DataTable /// <summary> /// 完成数据的查询,返回DataTable /// </summary> /// <param name="sql">要执行的sql</param> /// <param name="param">参数</param> /// <returns>DataTable</returns> public static DataTable GetTable(string sql, params SqlParameter[] param) { //实例化连接对象,并指定连接字符串,自动释放资源,不用关闭 using (SqlConnection conn = new SqlConnection(connString)) { //数据适配器 SqlDataAdapter adp = new SqlDataAdapter(sql, conn); if (param != null) { //批量添加参数 adp.SelectCommand.Parameters.AddRange(param); } //填充并返回数据表 DataTable dt = new DataTable(); adp.Fill(dt); return dt; } } #endregion #region 根据sql获得List集合 /// <summary> /// 根据sql获得List集合 /// </summary> public static List<T> GetList<T>(String sql, params SqlParameter[] param) where T : class,new() { List<T> entities = new List<T>(); using (SqlDataReader sdr = SQLHelper.ExecuteReader(sql)) { while (sdr.Read()) { T entity = new T(); //获得当前实体类型信息 Type type = typeof(T); //遍历结果集中的每一列 for (int i = 0; i < sdr.FieldCount; i++) { //获得列名 String columnName = sdr.GetName(i); //根据列名取得属性信息 PropertyInfo property = type.GetProperty(columnName); //如果当前列的值为null则跳过 if (!(sdr.GetValue(i) is DBNull)) { //给属性赋值 property.SetValue(entity, sdr.GetValue(i), null); } } entities.Add(entity); } } return entities; } #endregion }

 

public abstract class SQLHelper    {        //只读的静态数据库连接字符串        //需添加引用System.Configuration;        public static readonly string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;        //public static readonly string connString = "server=.;database=Weight;uid=sa;pwd=1";        #region 执行 增 删 改        /// <summary>        /// 执行 增 删 改        /// </summary>        /// <param name="sql">要执行的SQL</param>        /// <param name="param">参数</param>        /// <returns>影响行数</returns>        public static int ExecuteNonQuery(string sql, params SqlParameter[] param)        {            //实例化连接对象,并指定连接字符串,自动释放资源,不用关闭            using (SqlConnection conn = new SqlConnection(connString))            {                //实例化命令对象,指定sql,与连接对象                using (SqlCommand cmd = new SqlCommand(sql, conn))                {                    //如果有参数                    if (param != null)                    {                        //批量添加参数                        cmd.Parameters.AddRange(param);                    }                    //打开连接                    conn.Open();                    //执行sql并返回影响行数                    return cmd.ExecuteNonQuery();                }            }        }        /// <summary>        /// 返回首行首列对象        /// </summary>        /// <param name="sql">要执行的SQL</param>        /// <param name="param">参数</param>        /// <returns>首行首列对象</returns>        public static object ExecuteScalar(string sql, params SqlParameter[] param)        {            //实例化连接对象,并指定连接字符串,自动释放资源,不用关闭            using (SqlConnection conn = new SqlConnection(connString))            {                //实例化命令对象,指定sql,与连接对象                using (SqlCommand cmd = new SqlCommand(sql, conn))                {                    //如果有参数                    if (param != null)                    {                        //批量添加参数                        cmd.Parameters.AddRange(param);                    }                    //打开连接                    conn.Open();                    //执行sql并返回影响行数                    return cmd.ExecuteScalar();                }            }        }        #endregion        #region 执行 查询        /// <summary>        /// 执行 查询        /// </summary>        /// <param name="sql">要执行的SQL</param>        /// <param name="param">参数</param>        /// <returns>数据集</returns>        public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] param)        {            //实例化连接对象,并指定连接字符串            SqlConnection conn = new SqlConnection(connString);            //实例化命令对象,指定sql,与连接对象            using (SqlCommand cmd = new SqlCommand(sql, conn))            {                //如果有参数                if (param != null)                {                    //批量添加参数                    cmd.Parameters.AddRange(param);                }                //打开连接                conn.Open();                //执行sql并返回一个只进只读保持SQL连接的结果集,如果将返回的SqlDataReader关闭时也将关闭连接                return cmd.ExecuteReader(CommandBehavior.CloseConnection);            }        }        #endregion        #region 完成数据的查询,返回DataTable        /// <summary>        /// 完成数据的查询,返回DataTable        /// </summary>        /// <param name="sql">要执行的sql</param>        /// <param name="param">参数</param>        /// <returns>DataTable</returns>        public static DataTable GetTable(string sql, params SqlParameter[] param)        {            //实例化连接对象,并指定连接字符串,自动释放资源,不用关闭            using (SqlConnection conn = new SqlConnection(connString))            {                //数据适配器                SqlDataAdapter adp = new SqlDataAdapter(sql, conn);                if (param != null)                {                    //批量添加参数                    adp.SelectCommand.Parameters.AddRange(param);                }                //填充并返回数据表                DataTable dt = new DataTable();                adp.Fill(dt);                return dt;            }        }        #endregion        #region 根据sql获得List集合        /// <summary>        /// 根据sql获得List集合        /// </summary>        public static List<T> GetList<T>(String sql, params SqlParameter[] param)            where T : class,new()        {            List<T> entities = new List<T>();            using (SqlDataReader sdr = SQLHelper.ExecuteReader(sql))            {                while (sdr.Read())                {                    T entity = new T();                    //获得当前实体类型信息                    Type type = typeof(T);                    //遍历结果集中的每一列                    for (int i = 0; i < sdr.FieldCount; i++)                    {                        //获得列名                        String columnName = sdr.GetName(i);                        //根据列名取得属性信息                        PropertyInfo property = type.GetProperty(columnName);                        //如果当前列的值为null则跳过                        if (!(sdr.GetValue(i) is DBNull))                        {                            //给属性赋值                            property.SetValue(entity, sdr.GetValue(i), null);                        }                    }                    entities.Add(entity);                }            }            return entities;        }        #endregion    }

c#简单的SQLHelp

标签:

小编还为您整理了以下内容,可能对您也有帮助:

c#怎么调用本地sql数据库 进行 查询

创建一个与本地数据库连接的连接对象,以sql server数据库为例:

//主要代码

添加一个system.data.sqlclient命名空间

using System.data.sqlclient

sqlconnection con = new sqlconnnection();

con.connectionstring="server=(local);database=数据库名;uid=用户名;pwd=密码";

//然后设置你要执行的sql命令

string sqltext="select * from users where = ' "+textbox1.text.trim()+" ' ";

//其他的可以参考DataGridView控件的方法,显示数据

如何在C#调用SQL Server的存储过程

1、找开sql server 2005,创建表名为abc的表,表的设计如图。

2、给表中加入三行数据,如图。

3、创建一个名为“pro_abc”的存储过程,内容如图。

4、在程序中的配置文件,配置数据库链接字符串,如图。

5、在程序中创建一个抽象类SqlHelper,来实现数据访问层的代码,如图。

6、最后在窗体程序中写入调用存储过程的代码,如图。

7、通过断点,就可以得到存储过程的所有结果了。这样一个简单的存储过程,就能理解,如何得到查询结果集,如何得到返回参数,如何得到输出参数。

C#中使用SQL

Dispose了,就必须再Create一次
而Close()后,还可以再Open(),
而Dispose后,对象都不存在了,就不能Open()了
Dispose是对于对象自身而言的,Close是对于连接数据库而言的
其它都是误导...

Close函数和Dispose函数则是一种约定。调用Close函数释放资源后可能还需要再次使用,而Dispose函数释放的资源不再使用。
另外,如果类实现了IDisposable接口,实例化类时可以使用using关键字,则当超出using关键字作用域时会隐式调用Dispose函数

以下是相关知识点:

1.SqlConnection conn = new SqlConnection(strConnection)时,如果原来的连接已经关闭,此时需要开启一个新连接时,只要strConnection与上次的一样,就会又从连接池中取回原来的对象。Close时,SqlConnection的实例并不会被释放,它仅仅是被关闭了,并放置到了另一个地方,当下次需要时,会再次取出来。这样可以避免创建实例的开例。哈,不过,我认为这样的意义不是很大,只是.NET框架提供的一种管理优化机制而已(因为最消耗时间的还是Open与Close)

连接池允许应用程序从连接池中获得一个连接并使用这个连接,而不需要为每一个连接请求重新建立一个连接。一旦一个新的连接被创建并且放置在连接池中,应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程。

当应用程序请求一个连接时,连接池为该应用程序分配一个连接而不是重新建立一个连接;当应用程序使用完连接后,该连接被归还给连接池而不是直接释放。

数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)。

使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程。而采用数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到数据库服务器,这样就节省了时间。

包含在ADO.NET中的每个.NET数据提供程序都可实现连接池。

每一个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据提供者会尝试将指定的连接字符串与连接池的字符串进行匹配。如果匹配失败,数据提供者创建一个新的连接并将它加入连接池。连接池被创建之后,除非进程结束,否则不会被拆除。有人认为这种处理方式会影响性能,其实不然,维护一个不活动的或者空的连接池不需要多少开销。

连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量。以后,系统会根据需要新建和加入连接对象,一直到达最大连接对象数量限额为止。如果程序请求一个连接对象时没有空闲的连接对象可用,且连接池里面的对象数量已达到上限,则请求被放入队列,一旦有连接被释放回缓冲池就立即取出使用。

注意:如果是并发访问里,一个连接正在被使用,而此时又启动了另一个进程或线程,则也会创建一个新的连接并放入连接池之中。只有第一次调用关闭后,第二次再次调用的时候,如果是相同的连接字符串,才会直接调用连接池中的连接。

关闭一个连接时,连接对象被返回给连接池以便重用,但这时实际的数据库连接并未被拆除。如果禁用了连接池,则实际的数据库连接也被关闭。这里必须强调的一点时,连接对象使用完毕后应当显式关闭并将它返回给连接池,不要依靠垃圾收集器来释放连接。

调用Close或Dispose方法可以将连接释放回连接池。只有当生存期结束或出现严重错误时,连接对象才会被从连接池删除。

对于.NET应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在SQLConnection对象的连接字符串中加进Pooling=true;确保你的应用程序允许连接池的使用。 ADO.NET默认为允许数据库连接池,如果你希望禁止连接池,可以使用如下的方式:
1) 使用SQLConnection对象时,往连接字符串加入如下内容:Pooling=False;
2) 使用OLEDBConnection对象时,往连接字符串加入如下内容:OLE DB Services=-4;

注意:在达到最小连接对象数量之前,是会不断创建新的连接对象的,另外,最大连接数量,实际上是指出了连接的并发数。

附带地提一下,在ADO.net 2.0 地世界中,修改SqlConnectionString 我们可以运用SqlConnectionStringBuilder类来完成

- Connection.dispose() vs Connection.close()
可能所有人经常看到网络上有很多文档以及MSDN站点都推荐所有人运用using(sqlconnection cn=new sqlconnection()){}这样地方式来创建Connection,因为当超过{}后,.net framwork会自动执行Connection.dispose()方法,所以可以确保Connetion被及时地关闭。

1)那么及时地调用.dispose()真地这么重要么,如果一个对象超出了生存空间,在.net中不是会自动被GC(垃圾回收器)自动清理地么?

这个问题其实是由于GC导致地,.net中运用地GC,他对于工作并不像我们这样勤奋。GC只有当外界环境非常恶劣地时候(没有足够地内容分配地时候)他才会动手打扫卫生(清理不运用地对象)。所以对于Connection 即使超出了变量地生命周期,它可能还没有被GC干掉。依旧未将Connection返回给Connection Pool。
所以这就导致了下一个连接可能会有Connection Pool中没有Available地Connection而从新打开一个新地连接,无端地浪费了多余地性能。所以ADO.net team反复强调要及时地关闭当前地连接。一个最好地方法就是运用using{}block 系统会在退出{}地时候自动调用connection.dispose方法,而dispose会自动去执行close方法,释放当前地connection。

2)Dispose 到底做了些什么? protected override void Dispose(bool disposing)
...{
if (disposing)
...{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
其实Connection.dispose方法就是call了一次close方法,所以两者是等同地。也就是说,如果您及时地执行了connection.close()方法,就没有必要必须再把connection包裹在一个using(){}中。

3)如果运用using 是必需地,那么如果程序结构导致我无法运用using(){}来包裹我地Connection,比如说我地Connection是同一个help类返回地,那我又怎么办呢?

这是一个经常遇到地问题。在这样地环境中,我们无法将整个connection包裹在一个connection中。
解决这样地方法有两个,一个就是修改您地代码结构。传入一个ConnectionString来返回Connection。另一个方法就是反复检查您地代码,是否及时关闭了Connection。因为Close地效果与dispose是相同地。当然如果不运用using(){}这个及时关闭Connection地任务就等于是交到了我们自己地手上,而不再由.net framework为我们把关了。

- 说了这么多,那么我们什么时候需要运用到Connection Pool呢?
一般而言这应该由您地项目需求而决定。

如果您地项目是ASP.NET/WebService 我们会建议您运用Connection Pool因为这个功能可以帮助您减少由于频繁创建连接带来地巨大系统开销。

如果您地系统是一个C/S模型结构,我们会不建议您运用Connection Pool,这是由于一般而言,在C/S这样地模型中,每一个用户均为运用自己地用户名密码去连接后台数据库,运用地均为不同地Connection String,根本不会出现频繁出现打开/关闭数据库连接地问题,实际上在C/S模型中,您可以一直使一个Connection维护open地关闭,而不Close,这样更可以提高您系统地性能,不会由于Connection Pool地额外检查而带来系统资源地消耗,相应情况下也不必担心一直打开地Connection长时间地占用了连接,导致其他地连接无法从connection pool 及时获取到。(因为您根本就不需要运用到connection pool)。

C#中使用SQL

Dispose了,就必须再Create一次
而Close()后,还可以再Open(),
而Dispose后,对象都不存在了,就不能Open()了
Dispose是对于对象自身而言的,Close是对于连接数据库而言的
其它都是误导...

Close函数和Dispose函数则是一种约定。调用Close函数释放资源后可能还需要再次使用,而Dispose函数释放的资源不再使用。
另外,如果类实现了IDisposable接口,实例化类时可以使用using关键字,则当超出using关键字作用域时会隐式调用Dispose函数

以下是相关知识点:

1.SqlConnection conn = new SqlConnection(strConnection)时,如果原来的连接已经关闭,此时需要开启一个新连接时,只要strConnection与上次的一样,就会又从连接池中取回原来的对象。Close时,SqlConnection的实例并不会被释放,它仅仅是被关闭了,并放置到了另一个地方,当下次需要时,会再次取出来。这样可以避免创建实例的开例。哈,不过,我认为这样的意义不是很大,只是.NET框架提供的一种管理优化机制而已(因为最消耗时间的还是Open与Close)

连接池允许应用程序从连接池中获得一个连接并使用这个连接,而不需要为每一个连接请求重新建立一个连接。一旦一个新的连接被创建并且放置在连接池中,应用程序就可以重复使用这个连接而不必实施整个数据库连接创建过程。

当应用程序请求一个连接时,连接池为该应用程序分配一个连接而不是重新建立一个连接;当应用程序使用完连接后,该连接被归还给连接池而不是直接释放。

数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)。

使用连接池的最主要的优点是性能。创建一个新的数据库连接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程。而采用数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到数据库服务器,这样就节省了时间。

包含在ADO.NET中的每个.NET数据提供程序都可实现连接池。

每一个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据提供者会尝试将指定的连接字符串与连接池的字符串进行匹配。如果匹配失败,数据提供者创建一个新的连接并将它加入连接池。连接池被创建之后,除非进程结束,否则不会被拆除。有人认为这种处理方式会影响性能,其实不然,维护一个不活动的或者空的连接池不需要多少开销。

连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量。以后,系统会根据需要新建和加入连接对象,一直到达最大连接对象数量限额为止。如果程序请求一个连接对象时没有空闲的连接对象可用,且连接池里面的对象数量已达到上限,则请求被放入队列,一旦有连接被释放回缓冲池就立即取出使用。

注意:如果是并发访问里,一个连接正在被使用,而此时又启动了另一个进程或线程,则也会创建一个新的连接并放入连接池之中。只有第一次调用关闭后,第二次再次调用的时候,如果是相同的连接字符串,才会直接调用连接池中的连接。

关闭一个连接时,连接对象被返回给连接池以便重用,但这时实际的数据库连接并未被拆除。如果禁用了连接池,则实际的数据库连接也被关闭。这里必须强调的一点时,连接对象使用完毕后应当显式关闭并将它返回给连接池,不要依靠垃圾收集器来释放连接。

调用Close或Dispose方法可以将连接释放回连接池。只有当生存期结束或出现严重错误时,连接对象才会被从连接池删除。

对于.NET应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在SQLConnection对象的连接字符串中加进Pooling=true;确保你的应用程序允许连接池的使用。 ADO.NET默认为允许数据库连接池,如果你希望禁止连接池,可以使用如下的方式:
1) 使用SQLConnection对象时,往连接字符串加入如下内容:Pooling=False;
2) 使用OLEDBConnection对象时,往连接字符串加入如下内容:OLE DB Services=-4;

注意:在达到最小连接对象数量之前,是会不断创建新的连接对象的,另外,最大连接数量,实际上是指出了连接的并发数。

附带地提一下,在ADO.net 2.0 地世界中,修改SqlConnectionString 我们可以运用SqlConnectionStringBuilder类来完成

- Connection.dispose() vs Connection.close()
可能所有人经常看到网络上有很多文档以及MSDN站点都推荐所有人运用using(sqlconnection cn=new sqlconnection()){}这样地方式来创建Connection,因为当超过{}后,.net framwork会自动执行Connection.dispose()方法,所以可以确保Connetion被及时地关闭。

1)那么及时地调用.dispose()真地这么重要么,如果一个对象超出了生存空间,在.net中不是会自动被GC(垃圾回收器)自动清理地么?

这个问题其实是由于GC导致地,.net中运用地GC,他对于工作并不像我们这样勤奋。GC只有当外界环境非常恶劣地时候(没有足够地内容分配地时候)他才会动手打扫卫生(清理不运用地对象)。所以对于Connection 即使超出了变量地生命周期,它可能还没有被GC干掉。依旧未将Connection返回给Connection Pool。
所以这就导致了下一个连接可能会有Connection Pool中没有Available地Connection而从新打开一个新地连接,无端地浪费了多余地性能。所以ADO.net team反复强调要及时地关闭当前地连接。一个最好地方法就是运用using{}block 系统会在退出{}地时候自动调用connection.dispose方法,而dispose会自动去执行close方法,释放当前地connection。

2)Dispose 到底做了些什么? protected override void Dispose(bool disposing)
...{
if (disposing)
...{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
其实Connection.dispose方法就是call了一次close方法,所以两者是等同地。也就是说,如果您及时地执行了connection.close()方法,就没有必要必须再把connection包裹在一个using(){}中。

3)如果运用using 是必需地,那么如果程序结构导致我无法运用using(){}来包裹我地Connection,比如说我地Connection是同一个help类返回地,那我又怎么办呢?

这是一个经常遇到地问题。在这样地环境中,我们无法将整个connection包裹在一个connection中。
解决这样地方法有两个,一个就是修改您地代码结构。传入一个ConnectionString来返回Connection。另一个方法就是反复检查您地代码,是否及时关闭了Connection。因为Close地效果与dispose是相同地。当然如果不运用using(){}这个及时关闭Connection地任务就等于是交到了我们自己地手上,而不再由.net framework为我们把关了。

- 说了这么多,那么我们什么时候需要运用到Connection Pool呢?
一般而言这应该由您地项目需求而决定。

如果您地项目是ASP.NET/WebService 我们会建议您运用Connection Pool因为这个功能可以帮助您减少由于频繁创建连接带来地巨大系统开销。

如果您地系统是一个C/S模型结构,我们会不建议您运用Connection Pool,这是由于一般而言,在C/S这样地模型中,每一个用户均为运用自己地用户名密码去连接后台数据库,运用地均为不同地Connection String,根本不会出现频繁出现打开/关闭数据库连接地问题,实际上在C/S模型中,您可以一直使一个Connection维护open地关闭,而不Close,这样更可以提高您系统地性能,不会由于Connection Pool地额外检查而带来系统资源地消耗,相应情况下也不必担心一直打开地Connection长时间地占用了连接,导致其他地连接无法从connection pool 及时获取到。(因为您根本就不需要运用到connection pool)。

C# Windows froms 窗体程序,,连接SQLite数据库的,DBhelp类怎写

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SQLite;
namespace DAL
{
static class SqlHelper
{
private static bool Conn = false;
private static string ConnStr = @"Data Source=FileName;Pooling=true;FailIfMissing=false";
static SqlHelper()
{
Conn = TestConn();
}
public static bool Update(string SQL, params SqlParameter[] SqlParameters)
{
bool Result = false;
if (Conn)
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
{
SqlConn.Open();
using (SQLiteCommand SqlCmd = new SQLiteCommand(SQL, SqlConn))
{
if (SQLiteParameters != null)
SqlCmd.Parameters.AddRange(SqlParameters);
Result = SQLiteCmd.ExecuteNonQuery() > 0;
}
}
return Result;
}
public static T Scalar<T>(string SQL, params SQLiteParameter[] SqlParameters)
{
object Result = null;
if (Conn)
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
{
SqlConn.Open();
using (SQLiteCommand SqlCmd = new SQLiteCommand(SQL, SqlConn))
{
if (SQLiteParameters != null)
SqlCmd.Parameters.AddRange(SqlParameters);
Result = SqlCmd.ExecuteScalar();
}
}
return (Result != null) ? (T)Result : default(T);
}
public static DataTable Query(string SQL, params SQLiteParameter[] SqlParameters)
{
DataTable Result = null;
if (Conn)
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
{
SqlConn.Open();
using (SQLiteCommand SqlCmd = new SQLiteCommand(SQL, SqlConn))
{
if (SqlParameters != null)
SqlCmd.Parameters.AddRange(SqlParameters);
using (SQLiteDataAdapter SqlAdap = new SQLiteDataAdapter(SqlCmd))
using (DataSet ds = new DataSet())
{
SqlAdap.Fill(ds);
Result = ds.Tables[0];
}
}
}
return Result;
}

private static bool TestConn()
{
bool TestResult = false;
try
{
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
SqlConn.Open();
TestResult = true;
}
catch
{
TestResult = false;
}
return TestResult;
}
}
}

C# Windows froms 窗体程序,,连接SQLite数据库的,DBhelp类怎写

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SQLite;
namespace DAL
{
static class SqlHelper
{
private static bool Conn = false;
private static string ConnStr = @"Data Source=FileName;Pooling=true;FailIfMissing=false";
static SqlHelper()
{
Conn = TestConn();
}
public static bool Update(string SQL, params SqlParameter[] SqlParameters)
{
bool Result = false;
if (Conn)
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
{
SqlConn.Open();
using (SQLiteCommand SqlCmd = new SQLiteCommand(SQL, SqlConn))
{
if (SQLiteParameters != null)
SqlCmd.Parameters.AddRange(SqlParameters);
Result = SQLiteCmd.ExecuteNonQuery() > 0;
}
}
return Result;
}
public static T Scalar<T>(string SQL, params SQLiteParameter[] SqlParameters)
{
object Result = null;
if (Conn)
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
{
SqlConn.Open();
using (SQLiteCommand SqlCmd = new SQLiteCommand(SQL, SqlConn))
{
if (SQLiteParameters != null)
SqlCmd.Parameters.AddRange(SqlParameters);
Result = SqlCmd.ExecuteScalar();
}
}
return (Result != null) ? (T)Result : default(T);
}
public static DataTable Query(string SQL, params SQLiteParameter[] SqlParameters)
{
DataTable Result = null;
if (Conn)
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
{
SqlConn.Open();
using (SQLiteCommand SqlCmd = new SQLiteCommand(SQL, SqlConn))
{
if (SqlParameters != null)
SqlCmd.Parameters.AddRange(SqlParameters);
using (SQLiteDataAdapter SqlAdap = new SQLiteDataAdapter(SqlCmd))
using (DataSet ds = new DataSet())
{
SqlAdap.Fill(ds);
Result = ds.Tables[0];
}
}
}
return Result;
}

private static bool TestConn()
{
bool TestResult = false;
try
{
using (SQLiteConnection SqlConn = new SQLiteConnection(ConnStr))
SqlConn.Open();
TestResult = true;
}
catch
{
TestResult = false;
}
return TestResult;
}
}
}

C# DEV treelist 数据绑定问题,给解释下啊

保护无效BindDrop()

{

SqlHelp的sql =新SqlHelp();/ /创建一个SQL类和实例化

/ /使用SqlHelp内GetDataSet已方法对数据进行查询,并将查询结果返回到新的DataSet DS

数据集DS = sql.GetDataSet(“通过标识码递减从阶级顺序选择标识码,将class_name”);

/ /设置数据源是TTYPE这个DataSet DS第一表的第一个DataTable

TType.DataSource = ds.Tables [0]默认视图;。

/ /设置数据作为内部“将class_name”数据表绑定;相应的值(意味着数据被显示在屏幕上)

TType.DataTextField =“将class_name”;唯一的ID

/ /设置列的数据表里面的“标识码”中的相应值(这意味着不能在屏幕上显示的唯一标识数据)

TType.DataValueField =“标识码”;

TType.DataBind();/ /数据绑定}

公共字符串的inputText(字符串文本)

{

文本= text.Trim() ;/ /获取

输入文本框的内容,如果(string.IsNullOrEmpty(文本))

{

返回的String.Empty ;/ /如果输入为空集文本字符串。空像“”

}

在c#中怎么写SQL语句

//数据库操作的SQL语句用法基本相同,只是不同数据库使用的类不一样

//SQL查询

//当表A中的NAME与textbox输入内容相同时查询

string sqlselect = string.Format("select NAME from A where NAME='{0}'",textbox.Text );

 OleDbCommand cmd = new OleDbCommand(sqlselect, sqlcon);//sqlcon是连接字符串

 OleDbDataReader reader = cmd.ExecuteReader();//执行数据库查询操作

string str = reader[i].ToString();//i为ID所在的列数

 reader.Close();

 reader.Dispose();

//SQL更新

//把表A中NAME这一行对应的ID赋值给表B中的NAME

string sqlupdate = string.Format("update B set NAME='{0}'",str);

OleDbCommand cmd = new OleDbCommand(sqlupdate , sqlcon);//sqlcon是连接字符串

int r = cmd.ExecuteNonQuery();//执行数据库的增删改,返回受影响的行数

sqlcon.Close();

Top