SQL Server
SqlConnection Sqlcommand Sql Dataset
连接关闭测试
public static void ConnectDB()
{
//创建数据库连接对象
string connString = "Server=.;DataBase=TestManageDB;Uid=sa;Pwd=******";
SqlConnection conn = new SqlConnection(connString);
//打开连接
conn.Open();
//判断数据库是否成功打开
if (conn.State == ConnectionState.Open) Console.WriteLine("连接成功");
//关闭连接
conn.Close();
if (conn.State == ConnectionState.Closed) Console.WriteLine("关闭成功");
}
一个操作数据库过程
public static void ExecuteInsert()
{
//1.创建连接对象
string connString = "Server=.;DataBase=TestManageDB;Uid=sa;Pwd=******";
SqlConnection conn = new SqlConnection(connString);
//定义sql语句
string sql = "insert into UserNews(NewsId,NewsName,NewsContent) values(100,'在这种','哈哈哈哈')";
//2.创建Command对象
//SqlCommand cmd = new SqlCommand();
//cmd.CommandText = sql;
//cmd.Connection = conn;
SqlCommand cmd = new SqlCommand(sql, conn);
//3.打开数据库连接
conn.Open();
//4.执行操作(只能用于insert、update、delete)
cmd.ExecuteNonQuery();//执行sql语句,并返回受影响的行数
//5.关闭连接
conn.Close();
}
注:ExecuteNonQuery()方法只能用于增删改
增删改实例
public static void ExecuteDo()
{
//1.创建连接对象
string connString = "Server=.;DataBase=TestManageDB;Uid=sa;Pwd=******";
SqlConnection conn = new SqlConnection(connString);
//定义sql语句
//增
string sql = "insert into UserNews(NewsId,NewsName,NewsContent) values(100,'小章','噢噢噢噢'),(1001,'小丑','斤斤计较'),(1002,'小伟','啊啊啊')";
//更新
string sql2 = "update UserNews set NewsId=1000 where NewsId=100";
//删除
string sql3 = "delete from UserNews where NewsId=1000";
//2.创建Command对象
// SqlCommand cmd = new SqlCommand(sql1, conn);
// SqlCommand cmd = new SqlCommand(sql2, conn);
SqlCommand cmd = new SqlCommand(sql3, conn);
//3.打开数据库连接
conn.Open();
//4.执行操作(只能用于执行insert、update、delete、不能指向)
int result= cmd.ExecuteNonQuery();//执行sql语句,并返回受影响的行数
Console.WriteLine("受影响行数:" + result);
//5.关闭连接
conn.Close();
}
执行单一结果查询
ExexuteScalar()方法,一般用来执行查询,结果返回object类型
/// <summary>
/// 执行单一结果查询
/// </summary>
public static void ExecuteSingle()
{
//1.创建连接对象
string connString = "Server=.;DataBase=TestManageDB;Uid=sa;Pwd=******";
SqlConnection conn = new SqlConnection(connString);
//定义sql语句
string sql="select Count(*)as NewsId from UserNews";
//2.创建Command对象,
SqlCommand cmd = new SqlCommand(sql, conn);
//3.打开数据库连接
conn.Open();
//4.执行查询操作(ExexuteScalar方法,一般用来执行查询,结果返回object类型)
object result = cmd.ExecuteScalar();//执行sql语句,返回第一行第一列
Console.WriteLine("查询结果:" + result);
//5.关闭连接
conn.Close();
}
ExecuteScalar()方法,如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列
执行多条结果查询
ExexuteReader()方法,多条结果查询,结果返回SqlDataReader类型,数据存在数据库中,需要用Read()方法读取
/// <summary>
/// 执行多条结果查询
/// </summary>
public static void ExecuteRead()
{
//1.创建连接对象
string connString = "Server=.;DataBase=TestManageDB;Uid=sa;Pwd=******";
SqlConnection conn = new SqlConnection(connString);
//定义sql语句
string sql="select NewsId,NewsName,NewsContent from UserNews";
//2.创建Command对象
SqlCommand cmd = new SqlCommand(sql, conn);
//3.打开数据库连接
conn.Open();
//4.执行查询操作(ExexuteReader方法,一般用来执行查询,结果返回SqlDataReader类型)
SqlDataReader reader = cmd.ExecuteReader();//执行sql语句,并返回受影响的行数
//判断是否有查询结果,来决定读取数据
int i=0;
while(reader.Read())
{
Console.WriteLine("第{0}行记录:", ++i);
Console.WriteLine(reader[0].ToString() + "\t" + reader[1] + "\t" + reader[2]);
}
//关闭读取器对象
reader.Close();
//5.关闭连接
conn.Close();
}
使用config来连接数据库
//配置文件中
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="testConnString" connectionString="Server=.;DataBase=TestManageDB;Uid=sa;Pwd=ZY18752375323"/>
</connectionStrings>
</configuration>
//静态连接字段
private static string connString = ConfigurationManager.ConnectionStrings["testConnString"].ToString();
需要引用system.configuration
SQLHelper
private static string connString = ConfigurationManager.ConnectionStrings["testConnString"].ToString();
/// <summary>
/// 增、删、改
/// </summary>
/// <param name="sql">数据库操作字符串</param>
/// 返回受影响行数
public static int ExeNonQue(string sql)
{
//1.创建连接对象
SqlConnection conn = new SqlConnection(connString);
//2.创建Command对象,
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
int result=cmd.ExecuteNonQuery();//执行sql语句,并返回受影响的行数
conn.Close();
return result;
}
//使用try catch验证
public static int ExeNonQue(string sql)
{
//1.创建连接对象
SqlConnection conn = new SqlConnection(connString);
//2.创建Command对象,
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return cmd.ExecuteNonQuery();//执行sql语句,并返回受影响的行数
}
catch(Exception ex)
{
throw new Exception("执行方法public static int ExeNon(string sql)时发生异常:" + ex);
}
finally
{
conn.Close();
}
}
//使用using自动关闭连接
/// <summary>
/// 添加、修改、删除通用
/// </summary>
/// <param name="sql"></param>
/// <param name="paras"></param>
/// <returns></returns>
public static int ExeNonQue(string sql,params SqlParameter[] paras)//params 设置为可选参数(即可传可不传值)
{
{
//using自动释放资源(不需要写close())
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
if(paras.Length!=0)//paras没有传值时
{
cmd.Parameters.AddRange(paras);
}
try
{
conn.Open();
return cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception("static int ExeNonQue(string sql)方法出错" + ex.Message);
}
}
}
/// <summary>
/// 返回首行首列
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static string ExeSca(string sql)
{
//1.创建连接对象
SqlConnection conn = new SqlConnection(connString);
//2.创建Command对象,
SqlCommand cmd = new SqlCommand(sql, conn);
//3.打开数据库连接
conn.Open();
//4.执行查询操作(ExexuteScalar方法,一般用来执行查询,结果返回object类型)
string result = (cmd.ExecuteScalar()).ToString();//执行sql语句,返回第一行第一列
// Console.WriteLine("查询结果:" + result);
//5.关闭连接
conn.Close();
return result;
}
//try catch验证
/// <summary>
/// 返回首行首列
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static string ExeSca(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return Convert.ToString(cmd.ExecuteScalar());//执行sql语句,返回第一行第一列(obj类型)
}
catch(Exception ex)
{
throw new Exception("执行方法public static string ExeSca(string sql)时发生异常:" + ex);
}
finally
{
conn.Close();
}
}
/// <summary>
/// 获取结果集,需要自己读取
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static SqlDataReader GetReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
//执行查询操作(ExexuteReader方法,结果返回SqlDataReader类型数据流)
//添加CommandBehavior.CloseConnection后,reader对象的conn连接会跟随reader对象的关闭自动关闭
//所以读取完数据后一定要记得关闭reader对象(即dr.close())
SqlDataReader dr= cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
catch(Exception ex)
{
throw new Exception("执行方法 public static SqlDataReader GetReader(string sql)时发生异常:" + ex);
}
}
GetReader()方法,返回数据流的使用示例
public class SQLHelper
{
public static SqlDataReader GetReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
//执行查询操作(ExexuteReader方法,结果返回SqlDataReader类型数据流)
//添加CommandBehavior.CloseConnection后,reader对象的conn连接会跟随reader对象的关闭自动关闭
//所以读取完数据后一定要记得关闭reader对象(即dr.close())
SqlDataReader dr= cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
catch(Exception ex)
{
throw new Exception("执行方法 public static SqlDataReader GetReader(string sql)时发生异常:" + ex);
}
}
}
public class Test
{
public void TestSQLHelper3()
{
string sql = "select * from UserNews ";
SqlDataReader dr = SQLHelper.GetReader(sql);
int i = 0;
while(dr.Read())
{
Console.WriteLine("第{0}行记录:", ++i);
Console.WriteLine(dr[0].ToString() + "\t" + dr[1] + "\t" + dr[2]);
}
dr.Close();//关闭了dr对象,即自动关闭了conn
}
}
ExecuteReader()方法返回的是一个指向数据的流,数据需要我们从中读取,如果读取之前关闭了数据连接(conn.close()),就会报错(阅读器关闭时尝试调用read无效)。添加CommandBehavior.CloseConnection后,reader对象的conn连接会跟随reader对象的关闭自动关闭,所以无需关闭conn数据连接,只要在读完数据后关闭阅读器就可以自动关闭数据连接。
DataTable
public static DataTable GetDataTable(string sql, params SqlParameter[] paras)//params 设置为可选参数(即可传可不传值)
{
DataTable dt = new DataTable();
//datatable是断开式连接,不需要open(),也不需要close()
using (SqlConnection conn = new SqlConnection(connString))//using表示作用域外自动关闭连接(虽然datatable不需要关闭和打开)
{
SqlCommand cmd = new SqlCommand(sql, conn);
if(paras.Length!=0)
{
cmd.Parameters.AddRange(paras);
}
//创建数据适配器
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
//填充
adapter.Fill(dt);
}
return dt;
}
使用实例
public void GetDataTable()
{
usernews.NewsId = 1001;//因为是测试,就在这里传数据了
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@NewsId",usernews.NewsId)
};
string sql = " select * from UserNews where NewsId=@NewsId";
DataTable dt= SQLHelper.GetDataTable(sql,paras);
//遍历出datatable中数据
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count;j++ )
{
Console.Write(dt.Rows[i][j]+" ");
}
Console.WriteLine();
}
}