using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
System.Data.SqlClient;
using
System.Configuration;
using
_17DateStr.DataSet1TableAdapters;
/* DataSet
* 每次读取的数据都创建连接,执行Command得到SqlDataReader太麻烦,让我们封装一个方法
*
* SqlDataReader对于小数据量的数据来说带来的只有麻烦,优点可以忽略不计
*
* SqlDataReader是连接相关的,SqlDataReader中的查庖结果并不是放到程序中的
* 而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行
* 一旦连接开就不能再读取,这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响
* ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开,服务器断开都不影响数据的读取
* DataSet dataset = new DataSet();
* SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dataset);
*
* SqlDataAdapter是DataSet和数据库之间的沟通的桥梁,数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow
* foreach(DataRow row in dataset.Tables[0].Rows){
* row["name"];
* }
*
*
* SQLHelper
* 封装一个SQLHelper类方便使用,提供ExecuteData Table(string sql, params SqlParameter[] parameters)
* ExecuteNonQuery(string sql, params SqlParameter[] parameters)
* ExecuteScalar(string sql, params SqlParameter[] parameters)
* 等方法,网上有自由软件提供的最全的SQLHelper类,是Enterprise Libarary 中的一部分
* 用Sqlhelper重写登陆程序
* 用SQLHelper重写省市选择程序, 电话地址归属地查询
* new SqlParameter("e",0)的陷阱
* sqlconnection在程序中一直保持它open可以吗?对于数据库来说,连接是非常宝贵的资源,一定要用完了就close display
*
*
* DataSet的更新
* 可以更新row["Name"] = "yzk"; 删除行datatable.Rows.Remove(),新增行datatable.NewRow(); 这一切都是修改的内存中的DataSet,没有修改数库
* 可以调用SqlDataAdpater的update方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet,DataTable,或者若干DataRow
* 但是需要为sqlDataAdapter提供DeleteCommand, UpdateCommand InsertCommand它才知道如何将对DataSet的修改提交到数据库
* 由于这几个Command要求格式非常苛刻,因此开发人员自己写非常困难,可以用SqlCommandBuilder自动生成这几个command,用法很简单
* new SqlCommandBuilder(adapter) 查看生成的Command(没有直接赋值给SqlDataAdapter)
* 看SqlCommandBuilder的, sqlCommandBuilder要求表必须有主键
* (*)通过DataRow的RowState可以获得行的状态(删除,修改,新增等);调用DataSet的GetChanges()方法得到变化的结果集,降低传递的资源占用
*
*/
namespace
_17DateStr
{
public
partial
class
Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
private
void
button1_Click(
object
sender, EventArgs e)
{
SqlHelp.ExecuteNonQuery(
"Insert into T_Persons(name,age) values(@name,@age)"
,
new
SqlParameter(
"name"
,
"tom"
),
new
SqlParameter(
"age"
,11));
MessageBox.Show(
"插入成功!"
);
}
private
void
button2_Click(
object
sender, EventArgs e)
{
object
i = SqlHelp.ExecuteScalar(
"select count(*) FROM T_Persons"
);
MessageBox.Show(
"记录总数为:"
+Convert.ToString(i));
}
private
void
button3_Click(
object
sender, EventArgs e)
{
SqlDataReader reader = SqlHelp.ExecuteReader(
"Select * FROM T_Persons"
);
while
(reader.Read())
{
string
name = reader.GetString(reader.GetOrdinal(
"name"
));
MessageBox.Show(
"用户名为:"
+ name);
}
}
private
void
button4_Click(
object
sender, EventArgs e)
{
/*string connstr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * FROM T_Persons";
DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataTable table = dataset.Tables[0];
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
string name = Convert.ToString(row["name"]);
MessageBox.Show(name);
}
}
}*/
DataSet dataset =
new
DataSet();
string
connstr = ConfigurationManager.ConnectionStrings[
"ConnStr"
].ConnectionString;
using
(SqlConnection conn =
new
SqlConnection(connstr))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
"select * FROM T_Persons"
;
SqlDataAdapter adapter =
new
SqlDataAdapter(cmd);
adapter.Fill(dataset);
}
}
DataTable table = dataset.Tables[0];
for
(
int
i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
string
name = Convert.ToString(row[
"name"
]);
MessageBox.Show(name);
}
}
private
void
button5_Click(
object
sender, EventArgs e)
{
DataTable table = SqlHelp.ExecuteDataTable(
"select * FROM T_Persons"
);
foreach
(DataRow row
in
table.Rows)
{
string
name = Convert.ToString(row[
"name"
]);
MessageBox.Show(name);
}
}
private
void
tb_login_Click(
object
sender, EventArgs e)
{
string
name = tb_username.Text;
string
password = tb_password.Text;
if
(name !=
""
&& password !=
""
)
{
DataTable table = SqlHelp.ExecuteDataTable(
"select * FROM T_User where [email protected]"
,
new
SqlParameter(
"name"
, name));
if
(table.Rows.Count >= 1)
{
DataRow row = table.Rows[0];
int
errorTimes =Convert.ToInt32(row[
"errortimes"
]);
if
(errorTimes >= 3)
{
MessageBox.Show(
"用户被锁定,暂时不能登陆!"
);
return
;
}
else
{
string
p = Convert.ToString(row[
"password"
]);
if
(p == password){
MessageBox.Show(
"登陆成功!"
);
SqlHelp.ExecuteNonQuery(
"update T_User set errortimes=0 where [email protected]"
,
new
SqlParameter(
"name"
,name));
return
;
}
else
{
MessageBox.Show(
"登陆失败!"
);
SqlHelp.ExecuteNonQuery(
"update T_User set errortimes = errortimes+1 where name = @name"
,
new
SqlParameter(
"name"
,name));
return
;
}
}
}
else
{
MessageBox.Show(
"用户名不存在!"
);
}
}
else
{
MessageBox.Show(
"用户名和密码不能为空"
);
}
}
private
void
Form1_Load(
object
sender, EventArgs e)
{
DataTable table = SqlHelp.ExecuteDataTable(
"select * FROM promary"
);
cb_promary.DisplayMember =
"name"
;
foreach
(DataRow row
in
table.Rows)
{
Promary pr =
new
Promary();
pr.id = Convert.ToInt32(row[
"proID"
]);
pr.name = Convert.ToString(row[
"proName"
]);
cb_promary.Items.Add(pr);
}
}
private
void
cb_promary_SelectedIndexChanged(
object
sender, EventArgs e)
{
Promary pr = (Promary)cb_promary.SelectedItem;
int
id = pr.id;
string
name = pr.name;
DataTable table = SqlHelp.ExecuteDataTable(
"select * FROM city WHERE [email protected]"
,
new
SqlParameter(
"proID"
,id));
cb_city.Items.Clear();
cb_city.DisplayMember =
"name"
;
foreach
(DataRow row
in
table.Rows)
{
Promary p =
new
Promary();
p.id = Convert.ToInt32(row[
"cityID"
]);
p.name = Convert.ToString(row[
"cityName"
]);
cb_city.Items.Add(p);
}
}
private
void
button6_Click(
object
sender, EventArgs e)
{
DataTable table = SqlHelp.ExecuteDataTable(
"select * FROM T_User WHERE id = @id"
,
new
SqlParameter(
"id"
,(
object
)0));
}
private
void
button7_Click(
object
sender, EventArgs e)
{
String connStr = ConfigurationManager.ConnectionStrings[
"ConnStr"
].ConnectionString;
using
(SqlConnection conn =
new
SqlConnection(connStr))
{
conn.Open();
using
(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText =
"select * FROM T_Persons"
;
DataSet dataset =
new
DataSet();
SqlDataAdapter adapter =
new
SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataTable table = dataset.Tables[0];
DataRow row = table.Rows[0];
row[
"name"
] =
"jason"
;
//修改值
foreach
(DataRow r
in
table.Rows)
{
string
name = Convert.ToString(r[
"name"
]);
MessageBox.Show(
"name值为:"
+name);
}
//table.Rows.RemoveAt(1); //删除值
//table.NewRow(); //新建一个Row
//这里的sqlCommandBuilder主要是生成更新语句
SqlCommandBuilder builder =
new
SqlCommandBuilder(adapter);
//这里出现了小错误,没有为表设置主键,所以提示错误
//"update T_Persons set [email protected], [email protected]"
adapter.Update(dataset);
//对DataSet的修改都在内存中,没有提交到数据库
}
}
}
private
void
button8_Click(
object
sender, EventArgs e)
{
T_UserTableAdapter adapter =
new
T_UserTableAdapter();
_17DateStr.DataSet1.T_UserDataTable data = adapter.GetData();
for
(
int
i = 0; i < data.Count; i++)
{
_17DateStr.DataSet1.T_UserRow userRow = data[i];
MessageBox.Show(userRow.name);
}
}
}
public
class
Promary
{
public
int
id {
get
;
set
; }
public
string
name {
get
;
set
; }
}
}