连接前的知识
需要使用到的命名空间:
using System.Data.SqlClient; //数据库连接相关
其中需要用到的一些类:
类名 | 用途 |
---|---|
SqlConnection | 数据库连接类 |
SqlCommand | 数据库操作类 |
SqlDataReader | 读取相关 |
首先说明一句连接数据库的字符串:
string conString = @"Data Source=LAPTOP-1IDK05L6;
Initial Catalog=t_book;
Persist Security Info=True;
User ID=sa;
Password=chen011799."; //登录密码
因为这一行很长,我把它里面的每一个参数都分开来写了。
分别说明参数:
Data Source
这个参数是指sql server 的服务器名称。
如何知道服务器名称,就是当我们打开SQL Server Management Studio( sql可视化服务器 ) 时,登录界面如下,红色框出的就是服务器名称:
User ID
Password
这两个参数就是登录名和密码了。
Initial Catalog
这个参数是数据库名称,这里的数据库指的是我们已经登录之后:
我们自己创建的数据库(当然也可以是其他的),我创建的数据库名称叫t_book(红色框框出)
Persist Security Info
这个属性的意思是表示是否保存安全信息,其实可以简单的理解为"ADO在数据库连接成功后是否保存密码信息",(这个其实当前来看没什么大关系)
详细说明请看http://blog.csdn.net/yzsind/article/details/1507717
连接数据库
1.要连接数据库,得先有一个数据库,当登录SQL Server Management Studio之后,可以创建一个,就像我创建的 t_book,这里就不说如何创建数据库了,我们继续。
2.创建一个连接对象,使用的SqlConnection 类,这个类是有关连接数据库的类,构造方法中的参数就是之前说的那个长语句。通过这条语句,与数据库建立连接,并返回一个连接对象。语句如下。
SqlConnection sqlConnection = new SqlConnection(conString)
这样就可以通过这个sqlConnection 对象对数据库进行操作了。(这一句就连接成功了,后面的步骤是操作数据库)
3.接着初始化一个操作对象,使用的SqlCommand类创建一个操作对象:
SqlCommand sqlSelectCommand = new SqlCommand()
4.让操作对象获取要执行的sql语句:
//先写一条sql语句,我写的是一个插入语句,插入一行数据。
string comd1 = "INSERT INTO u_user VALUES(3,'chedong','aaa');";
//然后为操作对象的CommandText 属性赋值,获取这个操作语句.
sqlCommand.CommandText = comd1;
5.让操作对象与之前的连接对象达成连接.
sqlCommand.Connection = sqlConnection; //操作对象连接数据库对象
6.然后向连接发送sql语句。
int res = sqlCommand.ExecuteNonQuery();
这个函数的意思是,对连接执行transact sql(事务处理SQL)语句,并返回受到影响的行数。我增添了一行数据,那么受到影响的就是一行,返回1,res的结果为1,可以看一看:
MessageBox.Show("受到影响的行数为"+res.ToString() + "行");
完整代码:
try
{
string conString = @"Data Source=LAPTOP-1IDK05L6;
Initial Catalog=t_book;
Persist Security Info=True;
User ID=sa;
Password=chen011799."; //登录字符串
SqlConnection sqlConnection = new SqlConnection(conString) //连接对象
SqlCommand sqlSelectCommand = new SqlCommand() //操作对象
//先写一条sql语句,我写的是一个插入语句,插入一行数据。
string comd1 = "INSERT INTO u_user VALUES(3,'chedong','aaa');"; //需要执行的sql语句
//然后为操作对象的CommandText 属性赋值,获取这个操作语句.
sqlCommand.CommandText = comd1;
sqlCommand.Connection = sqlConnection; //操作对象连接数据库对象
int res = sqlCommand.ExecuteNonQuery(); //发送语句(执行语句)
MessageBox.Show("受到影响的行数为"+res.ToString() + "行");
}
catch (Exception e)
{
Debug.WriteLine("语句执行错误" + e.ToString());
}
后续提一句,那个SqlCommand 类,就是操作类与连接对象连接和获取sql’语句其实可以用它的一个构造方法实现。如下,第一个参数是sql语句,第二个是连接对象。
SqlCommand SqlCommand(String, SqlConnection);
读取数据的方法
使用SqlDataReader类来读取数据:
SqlConnection sqlConnection = new SqlConnection(conString); //与返回数据库连接对象
string selecetCmd = "SELECT * FROM u_user"; //查询语句
SqlCommand sqlCommand = new SqlCommand(selecetCmd ,sqlConnection ); //数据库操作对象
sqlConnection.Open(); //打开数据库连接
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); //获取读取的结果
//Read()方法是前进到下一条记录,最开始指向的是第一条记录的前面,也就是说当第一次执行Read()方法,指向的是第一条记录。
while(sqlDataReader.Read())
{
//以对话框的形式显示当前行的第一列的数据
MessageBox.Show(sqlDataReader[0].ToString());
//说明一下Shou()方法里面的内容,sqlDataReader每次包含一行的所有的内容,一个表,每一行有很多列,就像一个数组,[0]就是指的第一个数据。如果对应表中的数据是"username",如下图1-4,那么也可以使用 sqlDataReader["username"]这种方法来表示该列数据。
}
sqlDataReader.Close(); //记得用完就要关闭
sqlConnection.Close(); //连接对象打开了也要记得关闭.
(图1-4)
0
SqlDataReader 不能储存数据,所以在使用时不可以断开数据库连接
使用DateSet类来读取数据:
SqlConnection sqlConnection = new SqlConnection(conString); //与返回数据库连接对象
DataSet dataSet = new DataSet();
sqlConnection.Open(); //打开数据库
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd, sqlConnection);
sqlDataAdapter.Fill(dataSet, "set"); //填充dataSet并重命名为“set”
dataGridView1.DataSource = dataSet; //设置数据源
dataGridView1.DataMember = "set"; //设置dataGridView1组件显示的表名
对数据库的一些操作
插入一个数据:(已经有的四个)
string command = "INSERT INTO s_student(name,sex,age,school) VALUES('" + this.textBox1.Text
+ "','"+ this.textBox2.Text
+ "','"+ this.textBox3.Text
+ "','"+ this.textBox2.Text + "');"; //数据库插入语句
+
SqlConnection sqlConnection = new SqlConnection(loadString); //数据库连接
SqlCommand sqlCommand = new SqlCommand(command, sqlConnection); //操作对象
try
{
sqlConnection.Open();//打开数据库
sqlCommand.ExecuteNonQuery(); //执行命令
}
catch(SqlException e1)
{
MessageBox.Show(e1.ToString());
}
finally
{
sqlConnection.Close();
RefreshDataView();
}
上面有一个自定义的刷新DataGridView组件的函数:
public void RefreshDataView()
{
string command = "select * from s_student;"; //数据库查找语句
SqlConnection sqlConnection = new SqlConnection(loadString); //连接数据库
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command, sqlConnection); //桥接器
sqlDataAdapter.Fill(dataSet, "dataset"); //填充dataSet
dataGridView1.DataSource = dataSet.Tables["s_student"]; //设置数据源
dataGridView1.DataMember = "dataset"; //设置dataGridView1组件显示的表名
sqlConnection.Close();
}
删除数据的操作:
int raw = -1;
raw = dataGridView1.CurrentCell.RowIndex; //获取选中的行
if(raw == -1)
{
MessageBox.Show("选择要删除的行");
return;
}
int id = int.Parse(dataGridView1.Rows[raw].Cells[0].Value.ToString()); //获取id即主键
string command = "DELETE FROM s_student WHERE id = '" + id + "'"; //删除语句
SqlConnection sqlConnection = new SqlConnection(loadString); //数据库连接
SqlCommand sqlCommand = new SqlCommand(command, sqlConnection); //操作语句
try
{
sqlConnection.Open();
sqlCommand.ExecuteNonQuery(); //执行命令
}
catch (SqlException e1)
{
MessageBox.Show(e1.ToString());
}
finally
{
sqlConnection.Close();
RefreshDataView(); //刷新组件
MessageBox.Show("删除成功");
}