C# 通过类或者数据表名获取主键字段(没有外键)

SQL Server 语句(获取主键以及外键)

TABLE_NAME为数据库表名  COLUMN_NAME列的名称
SELECT TABLE_NAME,COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE TABLE_NAME='表的名称'

C#语句 可以通过类或者数据表名获取主键字段(没有外键)

        /// <summary>
        /// 根据类获取数据库表名称和主键字段
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <param name="model">类</param>
        /// <returns>数据库表名称 主键字段</returns>
        public static string[] GetTableKey<T>(T model)
        {
            string[] Nameandkey = new string[2];
            string key = "";
            if (model == null)
                return null;
            Type type = model.GetType();
            string TableName = type.Name;//获取类名
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT TABLE_NAME,COLUMN_NAME ");
            sb.Append("FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE ");
            sb.Append("WHERE TABLE_NAME=");
            sb.Append("'" + TableName + "'");
            DataTable dt = Query(sb.ToString());
            if (dt != null && dt.Rows.Count > 0)
            {
                key = dt.Rows[0]["COLUMN_NAME"].ToString();//主键字段
            }
            Nameandkey[0] = TableName;//数据库表名称
            Nameandkey[1] = key;//主键字段
            return Nameandkey;

        }
        /// <summary>
        /// 根据类获取数据库表名称和主键字段
        /// </summary>
        /// <typeparam name="T">泛型</typeparam>
        /// <returns>数据库表名称 主键字段</returns>
        public static string[] GetTableKey<T>()
        {
            string[] Nameandkey = new string[2];
            string key = "";
            Type type = typeof(T);
            string TableName = type.Name;//获取类名
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT TABLE_NAME,COLUMN_NAME ");
            sb.Append("FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE ");
            sb.Append("WHERE TABLE_NAME=");
            sb.Append("'" + TableName + "'");
            DataTable dt = PublicMethod.Query(sb.ToString());
            if (dt != null && dt.Rows.Count > 0)
            {
                key = dt.Rows[0]["COLUMN_NAME"].ToString();//主键字段
            }
            Nameandkey[0] = TableName;//数据库表名称
            Nameandkey[1] = key;//主键字段
            return Nameandkey;


        }
        /// <summary>
        /// 根据表名获取主键字段
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <returns>主键字段</returns>
        public static string GetTableKey(string TableName)
        {
            string key = "";//主键字段
            if (TableName == "")
                return key;
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT TABLE_NAME,COLUMN_NAME ");
            sb.Append("FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE ");
            sb.Append("WHERE TABLE_NAME=");
            sb.Append("'" + TableName + "'");
            DataTable dt = Query(sb.ToString());
            if (dt != null && dt.Rows.Count > 0)
            {
                key = dt.Rows[0]["COLUMN_NAME"].ToString();//主键字段
            }
            return key;

        }
        /// <summary>
        /// 查询数据函数DB
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <returns>数据</returns>
        public static DataTable Query(string strSql)
        {
            if (strSql == "")
                return null;
            DataSet ds = DBQuery(strSql.ToString());
            DataTable dt = new DataTable();
            dt = ds.Tables[0];
            return dt;

        }

下面是使用SQL Server数据库脱机  SQL Server Ce

        /// <summary>
        /// 统一访问路径  直接访问到debug下的App_Data\\DB.sdf
        /// </summary>
        public static string rootfilePath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName.Substring(0, System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName.LastIndexOf("\\") + 1);
        /// <summary>
        /// 连接数据库对象
        /// </summary>
        protected static string connstr = "Data Source=" + rootfilePath + "App_Data\\DB.sdf; Password =123456";
        /// <summary>
        /// 访问数据库语句
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <returns>DataSet数据集合</returns>
        public static DataSet DBQuery(string strSql)
        {
            //数据库脱机  用于SQL Server Compact脱机使用  使用其他的SQL Server可去掉
            SqlCeEngine model = new SqlCeEngine(connstr);
            try
            {
                model.Upgrade();升级4.0使用
            }
            catch { }
            //数据库脱机
            using (SqlCeConnection conn = new SqlCeConnection(connstr))
            {
                DataSet ds = new DataSet();
                try
                {
                    conn.Open();
                    SqlCeDataAdapter cmd = new SqlCeDataAdapter(strSql, conn);//数据库脱机
                    //cmd.Fill(ds, "ds");
                    cmd.Fill(ds);//数据库脱机
                }
                catch (System.Data.SqlClient.SqlException e)
                {
                    throw new Exception(e.Message);
                }
                return ds;
            }
        }

关于直接访问SQL Server 服务器

        /// <summary>
        /// 连接数据库对象  配置文件
        /// </summary>
        protected static string connstr = ConfigurationManager.ConnectionStrings["connstring"].ConnectionString;

配置文件如下  

(local) 代表的是本地数据库  可为IP地址   database数据库名   uid用户名  pwd密码
  <connectionStrings>
    <add name="connstring" connectionString="server=(local);database=HRMS;uid=sa;pwd=123;"/>
  </connectionStrings>
        /// <summary>
        /// 执行非连接式查询语句,返回DataSet
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static DataSet DBQuery(string strSql)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                DataSet ds = new DataSet();
                try
                {
                    conn.Open();
                    SqlDataAdapter cmd = new SqlDataAdapter(strSql, conn);
                    cmd.Fill(ds, "ds");
                }
                catch (System.Data.SqlClient.SqlException e)
                {
                    throw new Exception(e.Message);
                }
                return ds;
            }
        }
这只是部分数据库连接方法,如果不适用,网上还会有很多其他方法可以使用


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值