1.执行查询:
执行多行结果集的用executeReader;查询结果是放到数据库中,GetString、GetInt32等方法只是接收整数参数,也就是序号,用GetOrdinal方法根据列明动态得到序号;
private void btnTwo_Click(object sender, RoutedEventArgs e)
{
using (SqlConnection conn = new SqlConnection(
@"server=.;database=MyTest;uid=sa;pwd=sa")) {
conn.Open();
using(SqlCommand com=conn.CreateCommand())
{
com.CommandText = "select * from T_Student where Age<24";
using (SqlDataReader reader = com.ExecuteReader()) {
while (reader.Read())
{
//拿到Name列getString(1),String类型
String name = reader.GetString(1);
int age=reader.GetInt32(2);
MessageBox.Show(name+":"+age);
}
}
}
}
}
2.防止sql注入问题:
using (SqlConnection conn = new SqlConnection(
@"server=.;database=MyTest;uid=sa;pwd=sa"))
{
conn.Open();
using (SqlCommand cmd=conn.CreateCommand())
{
//有可能出现sql注入问题
//cmd.CommandText = "select Age from T_Student where Name='"+txtCha.Text+"'";
cmd.CommandText = "select Age from T_Student where Name=@Name";
cmd.Parameters.Add(new SqlParameter("@Name",txtCha.Text));
using (SqlDataReader reader=cmd.ExecuteReader())
{
while (reader.Read())
{
//age在查询结果中是第0列;
int age = reader.GetInt32(0);
MessageBox.Show(age.ToString());
}
}
}
}
3.DataSet:
sqlDataReader是连接相关的,sqldataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中的,sqldataReader只是相当于放了一个指针,只能读取当前指针指向的行,一旦连接断开就不能再读取,这样做的好处是无乱查询结果有多少条,对客户端程序占用的内存几乎没有影响。
sqlDataReader对于小数据量的数据来说带来的只有麻烦。ado.net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开,服务器断开都不影响数据的读取。数据集的好处是降低数据库服务器的压力,编程简单;
DataSet dataset=new DataSet();
SqlDataAdapter adapter=new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataSet包含若干表DataTable,DataTable包含若干行DataRow。
foreach(DataRow row in dataset.Tables[0].Rows)row["Name"]。
4.Demo:DataSet使用;
using (SqlConnection conn = new SqlConnection("Data Source=.; Initial Catalog=MyTest;User ID=sa;Password=sa"))
{
conn.Open();
//DataSet相当于本地的一个复杂集合(List<int>)
DataSet dataset = new DataSet();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_Student where Age<@aaa";
cmd.Parameters.Add(new SqlParameter("@aaa", 25));
//SqlDataAdapter是一个帮我们把SqlCommand查询结果填充到DataSet
//中的类
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);//执行cmd并且把SqlCommand查询结果填充到DataSet
}
DataTable table = dataset.Tables[0];
DataRowCollection rows = table.Rows;
for (int i = 0; i < rows.Count; i++)
{
DataRow row = rows[i];
int age = (int)row["Age"];
string name = (string)row["Name"];
MessageBox.Show(name + "," + age);
}
}
5.连接字符串放到配置文件里面
添加引用vs2012:引用-右键添加引用-选择打上勾勾-确定;System.Configuration
App.config文件:
<connectionStrings>
<add name="dbConnStr" connectionString="Data Source=.; Initial Catalog=MyTest;User ID=sa;Password=sa"/>
</connectionStrings>
//项目根目录添加一个“应用程序配置文件”,名字App.config
//App.config加节点,给add起一个name
//项目添加对System.configuration的引用(理解为添加开发包。System.Data就是ADO.Net的开发包)
//就能使用System.configuration里的ConfigurationManager类
//asp.net里只是Web.config
String str = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(str))
6.编写自己的sqlHelper
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace MyDBHelper
{
/*
配置文件
* <connectionStrings>
<add name="connStr" connectionString="server=.;database=MyTest;uid=sa;pwd=sa;"/>
</connectionStrings>
*/
class DBHelper
{
private static String connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
public static int ExecuteNonQuery(String sql) {
using (SqlConnection conn=new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd=conn.CreateCommand())
{
cmd.CommandText = sql;
return cmd.ExecuteNonQuery();
}
}
// return 0;
}
public static Object ExecuteScalar(String sql)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
return cmd.ExecuteScalar();
}
}
// return 0;
}
public static DataSet ExecuteDataSet(String sql)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
// return 0;
}
}
}
执行多行结果集的用executeReader;查询结果是放到数据库中,GetString、GetInt32等方法只是接收整数参数,也就是序号,用GetOrdinal方法根据列明动态得到序号;
private void btnTwo_Click(object sender, RoutedEventArgs e)
{
using (SqlConnection conn = new SqlConnection(
@"server=.;database=MyTest;uid=sa;pwd=sa")) {
conn.Open();
using(SqlCommand com=conn.CreateCommand())
{
com.CommandText = "select * from T_Student where Age<24";
using (SqlDataReader reader = com.ExecuteReader()) {
while (reader.Read())
{
//拿到Name列getString(1),String类型
String name = reader.GetString(1);
int age=reader.GetInt32(2);
MessageBox.Show(name+":"+age);
}
}
}
}
}
2.防止sql注入问题:
using (SqlConnection conn = new SqlConnection(
@"server=.;database=MyTest;uid=sa;pwd=sa"))
{
conn.Open();
using (SqlCommand cmd=conn.CreateCommand())
{
//有可能出现sql注入问题
//cmd.CommandText = "select Age from T_Student where Name='"+txtCha.Text+"'";
cmd.CommandText = "select Age from T_Student where Name=@Name";
cmd.Parameters.Add(new SqlParameter("@Name",txtCha.Text));
using (SqlDataReader reader=cmd.ExecuteReader())
{
while (reader.Read())
{
//age在查询结果中是第0列;
int age = reader.GetInt32(0);
MessageBox.Show(age.ToString());
}
}
}
}
3.DataSet:
sqlDataReader是连接相关的,sqldataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中的,sqldataReader只是相当于放了一个指针,只能读取当前指针指向的行,一旦连接断开就不能再读取,这样做的好处是无乱查询结果有多少条,对客户端程序占用的内存几乎没有影响。
sqlDataReader对于小数据量的数据来说带来的只有麻烦。ado.net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开,服务器断开都不影响数据的读取。数据集的好处是降低数据库服务器的压力,编程简单;
DataSet dataset=new DataSet();
SqlDataAdapter adapter=new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataSet包含若干表DataTable,DataTable包含若干行DataRow。
foreach(DataRow row in dataset.Tables[0].Rows)row["Name"]。
4.Demo:DataSet使用;
using (SqlConnection conn = new SqlConnection("Data Source=.; Initial Catalog=MyTest;User ID=sa;Password=sa"))
{
conn.Open();
//DataSet相当于本地的一个复杂集合(List<int>)
DataSet dataset = new DataSet();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_Student where Age<@aaa";
cmd.Parameters.Add(new SqlParameter("@aaa", 25));
//SqlDataAdapter是一个帮我们把SqlCommand查询结果填充到DataSet
//中的类
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);//执行cmd并且把SqlCommand查询结果填充到DataSet
}
DataTable table = dataset.Tables[0];
DataRowCollection rows = table.Rows;
for (int i = 0; i < rows.Count; i++)
{
DataRow row = rows[i];
int age = (int)row["Age"];
string name = (string)row["Name"];
MessageBox.Show(name + "," + age);
}
}
5.连接字符串放到配置文件里面
添加引用vs2012:引用-右键添加引用-选择打上勾勾-确定;System.Configuration
App.config文件:
<connectionStrings>
<add name="dbConnStr" connectionString="Data Source=.; Initial Catalog=MyTest;User ID=sa;Password=sa"/>
</connectionStrings>
//项目根目录添加一个“应用程序配置文件”,名字App.config
//App.config加节点,给add起一个name
//项目添加对System.configuration的引用(理解为添加开发包。System.Data就是ADO.Net的开发包)
//就能使用System.configuration里的ConfigurationManager类
//asp.net里只是Web.config
String str = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(str))
6.编写自己的sqlHelper
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace MyDBHelper
{
/*
配置文件
* <connectionStrings>
<add name="connStr" connectionString="server=.;database=MyTest;uid=sa;pwd=sa;"/>
</connectionStrings>
*/
class DBHelper
{
private static String connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
public static int ExecuteNonQuery(String sql) {
using (SqlConnection conn=new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd=conn.CreateCommand())
{
cmd.CommandText = sql;
return cmd.ExecuteNonQuery();
}
}
// return 0;
}
public static Object ExecuteScalar(String sql)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
return cmd.ExecuteScalar();
}
}
// return 0;
}
public static DataSet ExecuteDataSet(String sql)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
// return 0;
}
}
}