110,566
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Drawing;
using System.IO;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main(string[] args)
{
string coonString = "server=192.168.30.10;database=ykhc;uid=sa;pwd=hc2008";
SqlConnection conn = new SqlConnection(coonString);
SqlCommand cmd = conn.CreateCommand();
//sql语句
cmd.CommandText = "SELECT goodsname, Basebarcode, saleprice, categorycode from \"000\".tbgoods";
//打开连接
conn.Open();
//执行sql
//cmd.ExecuteNonQuery();
//若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Console.Write(dr[0] + "\t");
Console.Write(dr[1] + "\t");
Console.Write(dr[2] + "\t");
Console.Write(dr[3]);
Console.WriteLine();
}
dr.Dispose();
//关闭连接
conn.Close();
}
}
using(var conn = createConnection())
{
.....
}
这样的结构来保证及时关闭数据库连接。
进一步地,当你自己的过程打开了一个 DbConnection,你通过 command.ExecuteReader 查询数据之后,假设需要将这个数据库连接再用于第二个 dbCommand.ExecuteReader 查询,那么自然是必须先要将前一个 DbReader 执行 Close 操作,否则在第二个查询时就会因为“数据连接正在被其它 Reader 占用”而崩溃。此时写List<...> result;
using(var reader = command.ExecuteReader())
{
.......
result = .......
}
.......
来及时关闭 DbReader。
对于你的程序来说,太简单了,它既没有演示出用同一个 DbConnection 反复给多个 DbDataReader 使用的情况,更没有较多并发访问 DbConnection 的情况。所以根本不需要及时调用 Close,就是让 GC 机制去自动地调用 Close 就足够了,你什么都不用写也不会出错。