一.简单SQL语句,如:
查询:select * from dbo.table_1 where Name=’Jim’
添加:insert into dbo.table_1(Name,Sex,Age) values(‘Jim’,’F’,18)
更新:update dbo.table_1 set Age=20 where Name=’Jim’
删除:delete from dbo.table_1 where Name=’Jim’
二.ADO.NET简介
数据库:水源
Connetcion对象:水龙头
Command对象:抽水机
DataAdapter、DataReader对象:输水管
DataSet对象:大水库
DataTable对象:小池子
三.连接/关闭数据库:Connection对象
引用命名空间:using System.Data.SqlClient;
使用的类:SqlConnection
打开数据库方法:Open
关闭数据库方法:Close/Dispose,(Close只关闭连接,Dispose关闭连接且清理资源)
查看连接状态的属性:state(主要枚举值:ConnectionState.Closed/Open)
具体语句:
SqlConnection conn;
privatevoid button1_Click(objectsender, EventArgs e)
{
if(this.textBox1.Text == "")
{
MessageBox.Show("请输入数据库名称。");
}
else
{
try
{
stringConStr = "Data Source=SHADOW-PC\\SQLEXPRESS;InitialCatalog=" + this.textBox1.Text+";User ID=sa;Password=123;";
conn = new SqlConnection(ConStr);
conn.Open(); //打开数据库
if(conn.State == ConnectionState.Open) //检查状态
{
this.label2.Text = "数据库【" + this.textBox1.Text.Trim()+ "】已成功打开";
}
}
catch
{
MessageBox.Show("数据库连接失败!");
}
}
}
privatevoid button2_Click(objectsender, EventArgs e)
{
//conn.Close(); //关闭数据库
conn.Dispose(); //关闭数据库并释放资源
if(conn.State == ConnectionState.Closed)
{
this.label2.Text= "数据库已成功关闭。";
}
}
说明,解决SQLServer 2008使用Windows验证的sa用户无法登陆的问题?
第一步,以windows验证模式进入数据库管理器;
第二步,右击sa,选择属性:在常规选项卡中,重新填写密码和确认密码(改成个好记的)。把强制实施密码策略去掉;
第三步,点击状态选项卡:勾选授予和启用。然后确定;
第四步,右击实例名称,选择属性;
第五步,点安全性,确认选择了SQL SERVER 和Windows身份验证模式;
第六步,重启SQLSERVER服务(重要)。
四.执行SQL语句:Command对象
命名空间:System.Data.SqlClient
三个重要属性:
Connection:设置要使用的SqlConnection
CommandText:设置SQL语句
CommandType:设置CommandText类型
三个重要方法:
1) ExecuteNonQuery:向数据库发送增、删、改命令,并返回受影响的行数如:
private voidbutton1_Click(object sender, EventArgs e)
{
conn = newSqlConnection("server=SHADOW-PC\\SQLEXPRESS;database=test;uid=sa;pwd=123");
conn.Open(); //打开数据库
SqlCommandcmd = new SqlCommand();
//设置SqlCommand的三个重要的属性
cmd.Connection = conn;
cmd.CommandText="update dbo.Table_2 set Prize=50 where Sex='F'";
cmd.CommandType=CommandType.Text;
inti=Convert.ToInt32(cmd.ExecuteNonQuery()); //执行SQL语句并返回受影响的行数
this.label1.Text="共有"+i.ToString()+"名MM获取资金";
conn.Dispose(); //关闭数据库
}
2) ExecuteReader:读取数据,并返回一SqlDataReader对象,如:
private void button2_Click(object sender, EventArgse)
{
conn = new SqlConnection("server=SHADOW-PC\\SQLEXPRESS;database=test;uid=sa;pwd=123");
conn.Open(); //打开数据库
SqlCommand cmd = newSqlCommand("select* from dbo.table_2 where sex='F'",conn);
SqlDataReader sdr = cmd.ExecuteReader(); //执行查询,并返回一对象
while (sdr.Read()) //调用Read方法,读取成功后返回true,否则返回false
{
this.listView1.Items.Add(sdr[0].ToString()); //sdr[i]表示索引值为i的列
}
sdr.Close(); //读取完后,关闭之以释放资源
this.button2.Enabled = false;
conn.Dispose(); //关闭数据库
}
3) ExecuteScalar:执行SQL语句,返回结果含有中的第一行第一列
五.数据库适配器:DataAdapter对象
DataSet与数据源之间的桥梁
4个属性:SelectCommand、DeleteCommand、InsertCommand、UpdateCommand
2个方法:Fill、Update
1. 用Fill方法填充DataSet数据集:
Fill方法使用Select语句从数据源中检索数据,Connction对象必须有效,但不需要将其打开,如:
private voidbutton3_Click(object sender, EventArgs e)
{
conn = newSqlConnection("server=SHADOW-PC\\SQLEXPRESS;database=test;uid=sa;pwd=123");
SqlCommandcmd=new SqlCommand("select * from dbo.table_2",conn);
SqlDataAdaptersda=new SqlDataAdapter();
sda.SelectCommand=cmd; //设置SelectCommand属性为cmd
DataSetds=new DataSet(); //创建一DataSet对象
sda.Fill(ds,"cs"); //用Fill方法填充DataSet对象,且内存表名称为”cs”
this.dataGridView1.DataSource=ds.Tables[0];
}
2. 用Update方法更新数据源
六.数据集:DataSet对象
DataSet数据来源于数据库或XML,要获取数据要使用DataAdapter来查询数据。
用Merge方法合并DataSet内容,如:
privatevoid Form1_Load(objectsender, EventArgs e)
{
SqlConnectionconn = new SqlConnection("server=SHADOW-PC\\SQLEXPRESS;database=test;uid=sa;pwd=123");
ds1 = newDataSet();
ds2 = newDataSet();
SqlDataAdaptersda1 = new SqlDataAdapter("select * from dbo.table_1", conn);
SqlDataAdaptersda2 = new SqlDataAdapter("select * from dbo.table_2", conn);
SqlCommandBuildersb1=new SqlCommandBuilder(sda2); //来自动创建其它属性
sda1.Fill(ds1);
sda2.Fill(ds2);
ds2.Merge(ds1, true, MissingSchemaAction.AddWithKey); //ds1合并到ds2中
this.dataGridView1.DataSource= ds2.Tables[0];
}
说明:SqlCommandBuilde的作用:
1. 调用SqlDataAdapter的Update方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet,DataTable或者若干DataRow。
2. 但是需要为SqlDataAdapter提供DeleteCommand,UpdateCommand,InsertCommand它才知道如何将对DataSet的修改提交到数据库;
3. 由于这几个Command要求的格式非常苛刻,因此开发人员自己写非常困难,可以用SqlCommandBuilder自动生成这几个Command;
用法很简单:new SqlCommandBuilder(adapter)
说明:SqlCommandBuilder要求必须有主键。
用Copy方法复制DataSet内容,如:
private voidbutton1_Click(object sender, EventArgs e)
{
DataSetds3 = ds1.Copy(); //复制,返回一新的DataSet
this.dataGridView2.DataSource= ds3.Tables[0];
}