请教大虾,C#连接数据库问题

时间:2022-01-20 13:35:51
vb.net可以通过object test = createobject("OracleServer.OraSession")创建对象之后,
再DPOPEN打开session,就连接上数据库了
而c#中没有这个方法,只能 string connstring=连接字符串
OracleConnection conn = new OracleConnection(connstring);
conn.open;
使用完成之后
conn.close
请教:
C#是否有像vb那样的创建对象,打开session的方法连接数据库呢

14 个解决方案

#1


弄个sqlhelper,把数据库的操作都放里面

#2


C# 传统的链接数据库有Ado.net ,msdn 上有demo ,请搜索一下进行参考。

#3


请教大虾,C#连接数据库问题ado.net 微软专门干这事的

#4


去百度下个Dbhelper类吧,然后做一个配置文件,连接字符串放到里面。通过读取配置文件来做处理

#5



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入数据库操作的命名空间
using System.Data;//DataSet,DataTable
using System.Data.SqlClient;//SqlConnection,SqlCommand,SqlDataReader,SqlDataAdapter

namespace DAL
{
    /// <summary>
    /// 用于封装数据库操作的辅助类
    /// </summary>
    class DBHelper
    {
        //声明全局的连接字符串
        static string constr = "server=.;database=HotelManage;uid=sa;pwd=sasa";

        #region 执行普通的SQL命令
        /// <summary>
        /// 执行增删改语句,返回受影响的行数
        /// </summary>
        public static int MyExecuteNonQuery(string sql) 
        {
            using (SqlConnection con = new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql,con);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 执行查询语句,返回结果集的第1行第1列(单值)
        /// </summary>
        public static object MyExecuteScalar(string sql) 
        {
            using(SqlConnection con=new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql,con);
                return cmd.ExecuteScalar();
            }
        }

        /// <summary>
        /// 执行查询语句,返回DataTable对象
        /// </summary>
        public static DataTable MyDataTable(string sql)
        {
            SqlConnection con = new SqlConnection(constr);
            SqlDataAdapter dap = new SqlDataAdapter(sql,con);
            DataTable dt = new DataTable();
            dap.Fill(dt);
            return dt;
        }

        /// <summary>
        /// 执行查询语句,返回SqlDataReader对象
        /// </summary>
        public static SqlDataReader MyExecuteReader(string sql) 
        {
            SqlConnection con = new SqlConnection(constr);
            con.Open();
            SqlCommand cmd = new SqlCommand(sql,con);
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            //CommandBehavior.CloseConnection 表示关闭DataReader对象的同时关闭Connection对象
        }
        #endregion

        #region 执行参数化SQL命令
        /// <summary>
        /// 执行参数化增删改语句,返回受影响的行数
        /// </summary>
        public static int MyExecuteNonQuery(string sql,SqlParameter[] ps)
        {
            using (SqlConnection con = new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql, con);
                cmd.Parameters.AddRange(ps);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 执行参数化查询语句,返回结果集的第1行第1列(单值)
        /// </summary>
        public static object MyExecuteScalar(string sql, SqlParameter[] ps)
        {
            using (SqlConnection con = new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql, con);
                //3-为SqlCommand对象添加SqlParameter参数
                cmd.Parameters.AddRange(ps);
                return cmd.ExecuteScalar();
            }
        }

        /// <summary>
        /// 执行参数化查询语句,返回DataTable对象
        /// </summary>
        public static DataTable MyDataTable(string sql,SqlParameter[] ps)
        {
            SqlConnection con = new SqlConnection(constr);
            SqlDataAdapter dap = new SqlDataAdapter(sql, con);
            //SqlDataAdapter.SelectCommand属性就是1个SqlCommand对象
            dap.SelectCommand.Parameters.AddRange(ps);
            DataTable dt = new DataTable();
            dap.Fill(dt);
            return dt;
        }

        /// <summary>
        /// 执行查询语句,返回SqlDataReader对象
        /// </summary>
        public static SqlDataReader MyExecuteReader(string sql,SqlParameter[] ps)
        {
            SqlConnection con = new SqlConnection(constr);
            con.Open();
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.Parameters.AddRange(ps);
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            //CommandBehavior.CloseConnection 表示关闭DataReader对象的同时关闭Connection对象
        }
        #endregion
    }
}


看看能不能帮到你

#6


有dbhelper的框架,这些框架封装了一些底层操作,提供比较方便快捷的方法给高层模块调用,可以下载下来用。
你也可以自己写一个框架。

#7


谢谢楼上的回复,使用dbhelper类或者自己写一个操作数据库的类是否可以达到这样的目的,但是这种类操作完成数据之后就close了,下次使用的时候又要重新连接,这样就无法使用数据库的缓存的SQL语句和数据,再次查询数据的时候数据库又需要重新计算和查找,性能很慢,使createobject再打开数据的目的是保持与数据库的SESSION一直是OPEN的,这样高效率操作数据库

#8


你可以在程序启动的时候OPEN,每次操作完别CLOSE不就得了...

什么时候数据库连接失败了,再重新CLOSE,OPEN一次

#9


我再测试一下,

#10


能用就行了,再说 C# 里的数据库功能很强大

#11


ADO.Net百度很多的

#12


string connection =//建立连接字符串
            "server=WRET-MOSY688YVW\\MRGLL;database=db_test;Trusted_Connection=true";

        SqlConnection sc = new SqlConnection(connection);//创建SqlConnection对象
        try
        {
            sc.Open();//打开数据库连接
            string cmdtext =//建立SQL命令字符串
                "DELETE FROM tb_student WHERE student_name=@name";
            SqlCommand cmd = new SqlCommand(cmdtext, sc);//创建SqlCommand对象
            cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = "小飞";//添加参数并为参数赋值
            int i = cmd.ExecuteNonQuery();//执行删除记录的命令
            if (i > 0) Console.WriteLine("删除记录成功");//控制台输出字符串
        }
        catch (Exception ex)//捕获异常
        {
            Console.WriteLine("打开数据库错误:{0}", ex.Message);//控制台输出字符串
        }
        finally
        {
            sc.Close();//关闭数据库连接
        }
        System.Console.ReadLine();//等待回车继续

#13


如果是大数据量操作,是会加快查询数据的效率,但你过多的缓存,也会影响系统的性能呢,两者间取个平衡!

引用 6 楼 smthgdin 的回复:
有dbhelper的框架,这些框架封装了一些底层操作,提供比较方便快捷的方法给高层模块调用,可以下载下来用。
你也可以自己写一个框架。

#14


createobject ,还在用这么古老的连接,能与时俱进一些吗

#1


弄个sqlhelper,把数据库的操作都放里面

#2


C# 传统的链接数据库有Ado.net ,msdn 上有demo ,请搜索一下进行参考。

#3


请教大虾,C#连接数据库问题ado.net 微软专门干这事的

#4


去百度下个Dbhelper类吧,然后做一个配置文件,连接字符串放到里面。通过读取配置文件来做处理

#5



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入数据库操作的命名空间
using System.Data;//DataSet,DataTable
using System.Data.SqlClient;//SqlConnection,SqlCommand,SqlDataReader,SqlDataAdapter

namespace DAL
{
    /// <summary>
    /// 用于封装数据库操作的辅助类
    /// </summary>
    class DBHelper
    {
        //声明全局的连接字符串
        static string constr = "server=.;database=HotelManage;uid=sa;pwd=sasa";

        #region 执行普通的SQL命令
        /// <summary>
        /// 执行增删改语句,返回受影响的行数
        /// </summary>
        public static int MyExecuteNonQuery(string sql) 
        {
            using (SqlConnection con = new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql,con);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 执行查询语句,返回结果集的第1行第1列(单值)
        /// </summary>
        public static object MyExecuteScalar(string sql) 
        {
            using(SqlConnection con=new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql,con);
                return cmd.ExecuteScalar();
            }
        }

        /// <summary>
        /// 执行查询语句,返回DataTable对象
        /// </summary>
        public static DataTable MyDataTable(string sql)
        {
            SqlConnection con = new SqlConnection(constr);
            SqlDataAdapter dap = new SqlDataAdapter(sql,con);
            DataTable dt = new DataTable();
            dap.Fill(dt);
            return dt;
        }

        /// <summary>
        /// 执行查询语句,返回SqlDataReader对象
        /// </summary>
        public static SqlDataReader MyExecuteReader(string sql) 
        {
            SqlConnection con = new SqlConnection(constr);
            con.Open();
            SqlCommand cmd = new SqlCommand(sql,con);
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            //CommandBehavior.CloseConnection 表示关闭DataReader对象的同时关闭Connection对象
        }
        #endregion

        #region 执行参数化SQL命令
        /// <summary>
        /// 执行参数化增删改语句,返回受影响的行数
        /// </summary>
        public static int MyExecuteNonQuery(string sql,SqlParameter[] ps)
        {
            using (SqlConnection con = new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql, con);
                cmd.Parameters.AddRange(ps);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 执行参数化查询语句,返回结果集的第1行第1列(单值)
        /// </summary>
        public static object MyExecuteScalar(string sql, SqlParameter[] ps)
        {
            using (SqlConnection con = new SqlConnection(constr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(sql, con);
                //3-为SqlCommand对象添加SqlParameter参数
                cmd.Parameters.AddRange(ps);
                return cmd.ExecuteScalar();
            }
        }

        /// <summary>
        /// 执行参数化查询语句,返回DataTable对象
        /// </summary>
        public static DataTable MyDataTable(string sql,SqlParameter[] ps)
        {
            SqlConnection con = new SqlConnection(constr);
            SqlDataAdapter dap = new SqlDataAdapter(sql, con);
            //SqlDataAdapter.SelectCommand属性就是1个SqlCommand对象
            dap.SelectCommand.Parameters.AddRange(ps);
            DataTable dt = new DataTable();
            dap.Fill(dt);
            return dt;
        }

        /// <summary>
        /// 执行查询语句,返回SqlDataReader对象
        /// </summary>
        public static SqlDataReader MyExecuteReader(string sql,SqlParameter[] ps)
        {
            SqlConnection con = new SqlConnection(constr);
            con.Open();
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.Parameters.AddRange(ps);
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            //CommandBehavior.CloseConnection 表示关闭DataReader对象的同时关闭Connection对象
        }
        #endregion
    }
}


看看能不能帮到你

#6


有dbhelper的框架,这些框架封装了一些底层操作,提供比较方便快捷的方法给高层模块调用,可以下载下来用。
你也可以自己写一个框架。

#7


谢谢楼上的回复,使用dbhelper类或者自己写一个操作数据库的类是否可以达到这样的目的,但是这种类操作完成数据之后就close了,下次使用的时候又要重新连接,这样就无法使用数据库的缓存的SQL语句和数据,再次查询数据的时候数据库又需要重新计算和查找,性能很慢,使createobject再打开数据的目的是保持与数据库的SESSION一直是OPEN的,这样高效率操作数据库

#8


你可以在程序启动的时候OPEN,每次操作完别CLOSE不就得了...

什么时候数据库连接失败了,再重新CLOSE,OPEN一次

#9


我再测试一下,

#10


能用就行了,再说 C# 里的数据库功能很强大

#11


ADO.Net百度很多的

#12


string connection =//建立连接字符串
            "server=WRET-MOSY688YVW\\MRGLL;database=db_test;Trusted_Connection=true";

        SqlConnection sc = new SqlConnection(connection);//创建SqlConnection对象
        try
        {
            sc.Open();//打开数据库连接
            string cmdtext =//建立SQL命令字符串
                "DELETE FROM tb_student WHERE student_name=@name";
            SqlCommand cmd = new SqlCommand(cmdtext, sc);//创建SqlCommand对象
            cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = "小飞";//添加参数并为参数赋值
            int i = cmd.ExecuteNonQuery();//执行删除记录的命令
            if (i > 0) Console.WriteLine("删除记录成功");//控制台输出字符串
        }
        catch (Exception ex)//捕获异常
        {
            Console.WriteLine("打开数据库错误:{0}", ex.Message);//控制台输出字符串
        }
        finally
        {
            sc.Close();//关闭数据库连接
        }
        System.Console.ReadLine();//等待回车继续

#13


如果是大数据量操作,是会加快查询数据的效率,但你过多的缓存,也会影响系统的性能呢,两者间取个平衡!

引用 6 楼 smthgdin 的回复:
有dbhelper的框架,这些框架封装了一些底层操作,提供比较方便快捷的方法给高层模块调用,可以下载下来用。
你也可以自己写一个框架。

#14


createobject ,还在用这么古老的连接,能与时俱进一些吗