茫然,SqlConnectin到底什么时候Open的?

颤菊大师 2009-01-07 10:52:25
        static void Main(string[] args)
{
SqlConnection connection = new SqlConnection("Server =NIO\\SQLExpress" +
";Integrated Security = True" +
";Database =Northwind");
SqlDataAdapter dataApapter = new SqlDataAdapter("SELECT CustomerID,CompanyName FROM Customers" , connection);
Console.WriteLine(connection.State);//测试。
SqlCommandBuilder builder = new SqlCommandBuilder(dataApapter);
Console.WriteLine(connection.State);//测试。
DataSet dataSet = new DataSet();
Console.WriteLine(connection.State);//测试。
dataApapter.Fill(dataSet , "Customers");
Console.WriteLine(connection.State);//测试。
Console.WriteLine("名字改变前:{0}" , dataSet.Tables[0].Rows[9]["CompanyName"]);
Console.WriteLine(connection.State);//测试。
dataSet.Tables[0].Rows[9]["CompanyName"] = "newCompanyName";
Console.WriteLine(connection.State);//测试。
dataApapter.Update(dataSet , "Customers");
Console.WriteLine(connection.State);//测试。
Console.WriteLine("名字改变后:{0}" , dataSet.Tables[0].Rows[9]["CompanyName"]);
Console.WriteLine(connection.State);//测试。
connection.Close();
Console.WriteLine(connection.State);//测试。
Console.ReadKey();
}


结果:

Closed
Closed
Closed
Closed
名字改变前:Die Wandernde Kuh
Closed
Closed
Closed
名字改变后:newCompanyName
Closed
Closed


迷茫,谁可以解释一下吗?为什么不需要Open?什么时候需要,什么时候需要?建议需要还是建议不需要?
猜测:某一个语句自动打开,然后又自动关闭?详细解释下,我想不难吧?
...全文
169 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
颤菊大师 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liaojunbo 的回复:]
SqlDataAdapter对象的方法操作数据库自动开关数据库连接;
SqlCommend对象的方法操作数据库需手动开关数据库连接;
[/Quote]
明白!!谢谢!马上结贴!
ahbool123 2009-01-07
  • 打赏
  • 举报
回复
SqlDataAdapter对象的方法操作数据库自动开关数据库连接;
SqlCommend对象的方法操作数据库需手动开关数据库连接;
51Crack 2009-01-07
  • 打赏
  • 举报
回复
只需知道它在Fill时会自动开关就够了
颤菊大师 2009-01-07
  • 打赏
  • 举报
回复
我感觉有2次OPEN。
1、
dataApapter.Fill(dataSet , "Customers");
2、
dataApapter.Update(dataSet , "Customers");
颤菊大师 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 HDNGO 的回复:]
调用SqlDataAdapter对象Fill方法过程的数据库连接的打开与关闭

SqlDataAdapter的Fill方法调用前不需要有活动的SqlConnection对象,SqlDataAdapter会自己打开strConn语句中的数据库,获取查询结果后,关闭与数据库的连接。如果已经存在SqlConnection对象,无论是否已经打开,SqlDataAdapter执行完Fill方法后,均会将SqlConnection对象返回到原始状态

当程序中的多个SqlDataAdapter对象使用都一个SqlConnection对象时,为…
[/Quote]

理解了。那么按照7楼朋友的理解是正确的?

[Quote=引用 7 楼 sunny906 的回复:]
个人理解:
对数据库insert、update、delete时,需要Open数据库连接对象,执行完再Close
对数据库select查询时,不需要Open,只要设好适配器SqlDataAdapter,再填充数据集DataSet
[/Quote]
当只有SELECT时,便不需要OPEN?
xiaoyanwei2000 2009-01-07
  • 打赏
  • 举报
回复
sqldataadapter.fill()时如果sqlconnecttion已经打开,
那么fill完sqlconnection的状态任然时open,如果fill时没有open ,那么open,fill完后立刻close
这是我的理解
mykelly6 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 HDNGO 的回复:]
SqlDataAdapter是为处理脱机数据而设计的,调用其Fill方法填充DataSet时甚至不需要与数据库的活动连接。即如果调用Fill方法时,SqlDataAdapter与数据库的连接不是打开时,SqlDataAdapter将打开数据库连接,查询数据库,提取查询结果,将查询结果填入DataSet,然后关闭也数据库的连接。
[/Quote]
up
defaultError 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 HDNGO 的回复:]
调用SqlDataAdapter对象Fill方法过程的数据库连接的打开与关闭

SqlDataAdapter的Fill方法调用前不需要有活动的SqlConnection对象,SqlDataAdapter会自己打开strConn语句中的数据库,获取查询结果后,关闭与数据库的连接。如果已经存在SqlConnection对象,无论是否已经打开,SqlDataAdapter执行完Fill方法后,均会将SqlConnection对象返回到原始状态。

当程序中的多个SqlDataAdapter对象使用都一个SqlConnection对象时,为…
[/Quote]

学习了!!
oyljerry 2009-01-07
  • 打赏
  • 举报
回复
在SqlDataAdapter它的内部,访问的时候,打开了,访问,再关闭...
sunny906 2009-01-07
  • 打赏
  • 举报
回复
个人理解:
对数据库insert、update、delete时,需要Open数据库连接对象,执行完再Close
对数据库select查询时,不需要Open,只要设好适配器SqlDataAdapter,再填充数据集DataSet
yangwei644 2009-01-07
  • 打赏
  • 举报
回复
学习了 谢谢
HDNGO 2009-01-07
  • 打赏
  • 举报
回复
调用SqlDataAdapter对象Fill方法过程的数据库连接的打开与关闭

SqlDataAdapter的Fill方法调用前不需要有活动的SqlConnection对象,SqlDataAdapter会自己打开strConn语句中的数据库,获取查询结果后,关闭与数据库的连接。如果已经存在SqlConnection对象,无论是否已经打开,SqlDataAdapter执行完Fill方法后,均会将SqlConnection对象返回到原始状态。

当程序中的多个SqlDataAdapter对象使用都一个SqlConnection对象时,为避免多次打开与关闭SqlConnection对象,应该在调用SqlDataAdapter的Fill方法前调用SqlConnection的Open方法打开数据库的连接,待完成Fill调用后再调用SqlConnection的Close方法关闭数据库的连接。

zgke 2009-01-07
  • 打赏
  • 举报
回复
SqlConnection connection = new SqlConnection("Server =NIO\\SQLExpress" +
";Integrated Security = True" +
";Database =Northwind");
还没打开呢/

SqlDataAdapter dataApapter = new SqlDataAdapter("SELECT CustomerID,CompanyName FROM Customers" , connection);
打开了又关闭了

后面当然都是 Closed 没看出来什么不对的啊
HDNGO 2009-01-07
  • 打赏
  • 举报
回复
SqlDataAdapter是为处理脱机数据而设计的,调用其Fill方法填充DataSet时甚至不需要与数据库的活动连接。即如果调用Fill方法时,SqlDataAdapter与数据库的连接不是打开时,SqlDataAdapter将打开数据库连接,查询数据库,提取查询结果,将查询结果填入DataSet,然后关闭也数据库的连接。
C_sdnElf 2009-01-07
  • 打赏
  • 举报
回复
关注....
cpio 2009-01-07
  • 打赏
  • 举报
回复
SqlDataAdapter会自动打开,关闭

比如它的Fill方法,可能就会先打开,读取数据,然后关闭

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧