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;
}
}
这只是部分数据库连接方法,如果不适用,网上还会有很多其他方法可以使用