连接数据库基本步骤
1.创建连接字符串
//Data Source=steve-pc;连接本机
//Initial Catalog= 数据库名
//Integrated Security=True//windows验证方式
string constr="Data Source =steve-pc;Initial Catalog=数据库名;User Id=sa; password=123"
2.创建连接对象
using (SqlConnection con=new SqlConnection(constr))
{
//测试 打开连接
con.open()
// con.Close()}
3.打开连接
4.关闭连接
向表中插入一条数据
using(SqlConnection con=new SqlConnection (constr))
{
//编写sql语句
//增加一条
string sql="insert into TblPerson values ('李凯悦',18,174,0)";
//创建一个执行sql语句的对像
using (SqlCommand cmd=new SqlCommand (sql,con))
{
//开始执行sql语句
//打开连接(最晚打开连接,最早关闭连接,节省资源)
con.open()
//开始执行语句
cmd.ExecuteNonQuery();///insert\delete\update语句时,与一个返回值时int类型,表示执行insert,delete,update语句后,所影响的行数,只有执行这三个语句会返回所影响的行数,执行其他永远返回-1
cmd.ExecuteScalar()//当执行返回单个结果
cmd.ExecuteReader()//当查询出多行,多列结果的时候
}
}
修改一条语句
update TblPerson set uName="王国维",age=20,height=176 where autoId=44
查询出表中的记录条数
string sql="select count(*) from TblPerson "
object count =(int)cmd.ExecuteScalar();
连接字符串 创建连接对象 sql语句 创建命令对象sqlCommand 打开连接 执行
当sql语句执行的时候,如果是聚合函数那么EXecuteScalar()返回的不可能是null,因为聚合函数不会返回null,但是如果sql语句使用的不是聚合函数。那么ExecuteScalar()方法是有可能返回null的,那么在使用count变量的时候就需要先判断是否为null了
执行完毕后 会从表中查询出一些数据,这些查询出的数据是保存在了数据库服务器的内存当中
返回给应用程序一个SqlDataReader reader 接下来应用程序要获取数据的话 必须通过reader来获取数据
using (SqlDataReader reader= cmd.ExecuteReader())
{
if(reader.HasRows)
{
//reader指向第一条数据的前一条 reader.Read()向后移动一条数据
where(reader.Read())
{
//获取当前reader指向的数据
//reader.FieldCount,可以获取当前查询语句查询出的列的个数
for(int i=0;i<reader.FieldCount;i++)
{
Console.WriteLine(reader[i]+" ")
//getvalue只能根据列的索引来获取列的值 //但是通过reader索引器可以通过列名来获取列的值
Console.WriteLine(reader.GetValue(i))//reader["列名"]
//当遇到数据库中的null值的时候,通过reader,GetValue()或者reader[]索引器来获取列的值,拿到的是DBNull,不是c#的null ,而DBNull。Value的ToString()方法返回的时空字符串,所以最终没有报错
根据列名称获取列的索引
reader.GetOrdinal()
}
}
}
else
{
Console.WriteLine("没有查询到任何数据")
}
}
Datareader 特点
1.只读,只进 只能向前移动
2.使用Reader时必须保证连接时打开状态 当reader使用完毕 后,必须把reader关闭,释放,同时关闭释放连接对象
3.默认情况下DataReader要求独占一个连接对象
reader.GetXXXX() //使用强类型读取列中的数据 数据为null时报异常
reader.IsDBNull()?"Null":reader.GetInt32()//先判断是否为空
dataGridView