Foxtable(狐表)用户栏目专家坐堂 → ExecuteReader的疑惑


  共有6273人关注过本帖树形打印复制链接

主题:ExecuteReader的疑惑

帅哥哟,离线,有人找我吗?
不倒的翁
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
ExecuteReader的疑惑  发帖心情 Post By:2013/4/24 13:29:00 [只看该作者]

ExecuteReader有一个可选参数,如果设置为True,那么生成的DataTable不仅可以修改,还可以保存。
新建一个文件,在命令窗口测试下面的代码,会在A的第一行的第一列写入123:

Dim cmd As new SQLCommand
Dim
dt As DataTable
cmd
.CommandText = "select * From {A}"
dt = cmd.ExecuteReader(
True) '记得将参数设置为True
dt
.DataRows(0)("第一列") = 123
dt.Save()

DataTables(
"A").Load() '重新加载表A,看看值是否已经变化

如果以上代码改变为

Dim cmd As new SQLCommand
Dim
dt As DataTable
cmd
.CommandText = "select * From {A}"
dt = cmd.ExecuteReader(
True) '记得将参数设置为True

Dim dr As DataRow = dt.DataRows(0)
dr("第一列") = 123
dr.Save()

提示找不到""的DataTable

是不是不能用Dim dr As DataRow = dt.DataRows(0)定义???

既然Dim dt As DataTable
按照帮助中前期的指导写基础代码,很多人容易写成Dim dr As DataRow = dt.DataRows(0)

会误导哦,希望帮助中对这部分的说明详细些。

希望不是BUG。。。。

=====================无敌分割======================================

看了下自己项目中的代码。

如果:

Dim cmd As new SQLCommand
Dim
dt As DataTable
cmd
.CommandText = "select * From {XX表}"
dt = cmd.ExecuteReader(
) 'True参数不设置,就是原来2012中的代码写法。

Dim dr As DataRow = dt.DataRows(0)
这样能直接引用dr("XX列")的值。

而2013中dt = cmd.ExecuteReader(True) '加上True参数

Dim dr As DataRow = dt.DataRows(0)

引用的dr("XX列")的值都是“空”的。。。。

[此贴子已经被作者于2013-4-24 13:55:59编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/24 13:56:00 [只看该作者]

顶一下。。。。客服午休还没结束。。图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/24 14:33:00 [只看该作者]

2:30咯。。等待回答。。。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/4/24 14:46:00 [只看该作者]

没有道理的,做个小例子发上来测试看看。

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/24 15:15:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目6.rar

我这用的SQL2008,例子用的ACC数据库

提示空表

貌似值在ACC好像能正常引用。。。

但保存数据行就出错。


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/4/24 15:22:00 [只看该作者]

.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目6.zip


 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/24 15:35:00 [只看该作者]

以下是引用Bin在2013-4-24 15:22:00的发言:
.
 下载信息  [文件大小:30.0 KB  下载次数:0]
图片点击可在新窗口打开查看点击浏览该文件:管理项目6.zip

Dim cmd As New SQLCommand
cmd.C

cmd.CommandText = "Select * From {tb1}"
Dim dt As DataTable = cmd.ExecuteReader(True)
Dim dr As DataRow = DataTables("tb1").DataRows(0)
MessageBox.Show(dr("第一列"))
dr("第一列") = "更改"
dr.Save
MessageBox.Show("已保存")

为什么红字处不能用变量的呢????

这表如果将“tb1”的表从FT中删除肯定出错。(指的是直接通过SQLCommand取得SQL上的数据,而不在FT中添加外部数据表)

因为SQLCommand本来就是为了加载外部表用的。

DataTables("tb1")相当于在FT中已经加载的外部表保存的。

 

[此贴子已经被作者于2013-4-24 15:37:49编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/24 15:41:00 [只看该作者]

表达能力不好。

不知道说的问题大家理解没。

忘谅解啊。。。


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/4/24 15:42:00 [只看该作者]

以下是引用不倒的翁在2013-4-24 15:35:00的发言:

Dim cmd As New SQLCommand
cmd.C

cmd.CommandText = "Select * From {tb1}"
Dim dt As DataTable = cmd.ExecuteReader(True)
Dim dr As DataRow = DataTables("tb1").DataRows(0)
MessageBox.Show(dr("第一列"))
dr("第一列") = "更改"
dr.Save
MessageBox.Show("已保存")

为什么红字处不能用变量的呢????

这表如果将“tb1”的表从FT中删除肯定出错。(指的是直接通过SQLCommand取得SQL上的数据,而不在FT中添加外部数据表)

因为SQLCommand本来就是为了加载外部表用的。

DataTables("tb1")相当于在FT中已经加载的外部表保存的。

 

[此贴子已经被作者于2013-4-24 15:37:49编辑过]
变量中的DataTable 和FT中的显示出来的表.不是一回事.也不是同一个东西吧.


 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/24 15:46:00 [只看该作者]

以下是引用Bin在2013-4-24 15:42:00的发言:

BIN,我例子里的tb1表是外部表。你删除后用dt变量试试,出错的。

tb1外部表删除。用SQLCommand能获得ACC数据库的数据

但用cmd.ExecuteReader

定义Dim dr As DataRow = dt.DataRows(0)
出错的。

但能取到值。

MessageBox.Show(dr("第一列"))


 回到顶部
总数 27 1 2 3 下一页