C#窗体应用连接sql server 数据库-持续更新8fAL!ReV3chT

连接前的知识

需要使用到的命名空间:

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("删除成功");
}
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值