使用App.config配置文件封装连接字符串,方便重复使用
--->添加App.conifg配置文件
--->Add : ConnectionString:
--->添加引用

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="conStr" connectionString="Data Source=.;Initial Catalog=;User ID=;Password="/>
</connectionStrings>
</configuration>

封装一个SQLHelper类方便使用

 using System.Configuration;
using System.Data;//DatSet..Table SqlDataAdapter
using System.Data.SqlClient;//SqlConnection Command DataReader
namespace Common
{
public class SqlHelper
{
//连接字符串
//1、添加引用 2、导入命名空间 为了使用ConfigurationManager
private static string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString; //增删改查
//查找数据 ExecuteScalar()返回首行首列 ExecuteReader() DataTable /// <summary>
/// 返回DataTable
/// </summary>
/// <param name="sql">所用的sql语句</param>
/// <param name="param">可变,可以传参也可以不传参数</param>
/// <returns></returns>
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] param)
{
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlDataAdapter adapter = new SqlDataAdapter(sql, con))
{
//添加参数
adapter.SelectCommand.Parameters.AddRange(param);
//1.打开链接,如果连接没有打开,则它给你打开;如果打开,就算了
//2.去执行sql语句,读取数据库
//3.sqlDataReader,把读取到的数据填充到内存表中
adapter.Fill(dt);
}
}
return dt;
} /// <summary>
/// 执行查询,返回首行首列
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static object ExecuteScalar(string sql, params SqlParameter[] param)
{
object o = null;
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddRange(param);
con.Open(); o = cmd.ExecuteScalar();
}
}
return o;
} /// <summary>
/// 执行查询,返回SqlDataReader对象
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] param)
{
SqlDataReader reader = null;
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddRange(param);
con.Open(); reader = cmd.ExecuteReader();
}
}
return reader;
} /// <summary>
/// 执行增删改,返回受影响的行数
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] param)
{
int n = -;
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddRange(param);
con.Open();
n = cmd.ExecuteNonQuery();
}
}
return n;
} }
}
C#namespace: 是为了防止命名重复的 。
比如你在两个不同的命名空间中都可以有Student类。
此命名空间范围允许您组织代码并为您提供了创建全局唯一类型的方法。
 
 下面这个是应用sqlHelperComboBox来展示 省市联动
 
 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//在应用程序加载的时候 ,去数据库查找省的数据,给cboPro
DataTable dt = SqlHelper.ExecuteDataTable("select * from promary");
//将返回的DataTable作为cboPro的数据源
//让cboPro显示proName这个字段的值,一般是显示给客户看的
cboPro.DisplayMember = "proName";
//让valueMemberID,绑定的是对应的值,绑定处理程序标识 给程序员看的。
cboPro.ValueMember = "proID";
cboPro.DataSource = dt;
} private void cboPro_SelectedIndexChanged(object sender, EventArgs e)
{
//之前的写法
// MessageBox.Show(cboPro.Text);//获得在cbo中选择文本
//MessageBox.Show(cboPro.SelectedValue.ToString());//获得关联的数据 //string sql = "select * from city where proID="+cboPro.SelectedValue.ToString();
//带参数的sql语句
string sql = "select * from city where proID=@proID";
//准备一个sql参数
SqlParameter p = new SqlParameter("@proID", cboPro.SelectedValue.ToString());
//设置cboCity要显示的数据
cboCity.DisplayMember = "cityName";
//根据sql语句查询到的数据集
cboCity.DataSource = SqlHelper.ExecuteDataTable(sql, p);
}
}

C#开发学习——SqlHelper的应用的更多相关文章

  1. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  2. web前端开发学习内容

    应该 具备的 知识技能 :懂web标准,熟练手写 xhtml css3 并符合 符合w3c标准                       代码能 兼容主流浏览器.ie6.7.8.9 ff 等.    ...

  3. Android开发学习路线图

    Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...

  4. NET开发学习项目资源(2)

    NET开发学习项目资源 击标题链接即可下载. 目录: 1.征婚交友网站 前台交友信息和后台会员管理两大部分组成. 前台功能模块 该模块主要包括查询交友信息.显示交友信息.会员登录.会员信息管理.修改会 ...

  5. Civil 3D API二次开发学习指南

    Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...

  6. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  7. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  8. .net 网站开发学习资源

    慕课网 前端基础学习 http://www.imooc.com/course/list?c=fe 了解需求 例子之一 http://wenku.it168.com/d_000517899.shtml ...

  9. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

随机推荐

  1. Lightdm:奔跑吧GUI[已解决]

    Fedora替换gdm为lightdm解决无法登陆问题 前两天安装Codeblocks,这货安装了很多包和依赖,直接导致我重启进步去界面,卡在fedora LOGO处,如下 实在忧伤,已经因为折腾不知 ...

  2. Spring IOC 之Bean定义的继承

    一个Bean的定义可以包含大量的配置信息,包括构造器参数.属性值以及容器规范信息,比如初始化方法.静态工厂方法名字等等.一子bean的定义可以从父bean的定义中继承配置数据信息.子bean定义可以覆 ...

  3. 在项目管理工具Redmine中使用SubVersion进行版本管理

    原文:在项目管理工具Redmine中使用SubVersion进行版本管理 在项目管理工具Redmine中使用SubVersion进行版本管理 分类: Redmine2009-06-01 10:11 5 ...

  4. 【SSRS】入门篇(七) -- 报表发布

    原文:[SSRS]入门篇(七) -- 报表发布 完成[SSRS]入门篇(六) -- 分组和总计后,第一份简单的报表就已完成了,下面把报表发布到报表服务器上. (实际情况下,报表展示给用户未必是用报表服 ...

  5. mysql存储过程及常用函数

    原文:mysql存储过程及常用函数 一.函数 1.数学函数 CEIL()进一取整 SELECT CEIL(1.2);2 FLOOR()舍一取整 SELECT FLOOR(1.9);9 MOD取余数(取 ...

  6. OpenGL绘制棱锥,剔除

    /** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteB ...

  7. java 命令笔记

    http://www.hollischuang.com/archives/105 JPS jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号. jps相当于Solari ...

  8. C++一些注意点之转换操作符

    转换操作符定义 类可通过一个实参调用的非explicit构造函数定义一个隐式转换(其他类型—>类类型).当提供了实参类型的对象而需要一个类类型的对象时,编译器将使用该转换.这种构造函数定义了到类 ...

  9. SQL计算年代差

    1.用datediff函数 select datediff(yyyy,StuBirthday,getdate())>17 2.用year函数 select (year(getdate()-yea ...

  10. 传说中的华为Python笔试题——两等长整数序列互换元素,序列和的差值最小(修正)

    有两个序列a,b,大小都为n,序列元素的值任意整形数,无序:要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小. 1. 将两序列合并为一个序列,并排序,得到source ...