如何访问SqlDataReader 100分

cxfidc 2003-09-08 09:06:36
我在程序中生成了一个SqlDataReader,在调试程序的时候,可以通过quickwatch 窗口访问以下属性.

m_SqlDataReader.MetaData[8].metaType.SqlType

请问我在程序中可以访问这些属性吗??
请问该如何做,
...全文
40 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxfidc 2003-09-08
  • 打赏
  • 举报
回复
解决了这个问题,

以上两个方式都对,主要是因为我数据库中的值为空,:)

所以必须跳过为空的字段..:)
cxfidc 2003-09-08
  • 打赏
  • 举报
回复
以上的都试过了,发现都不行的,
我要做的是,把一个表的数据复制到另一个表.
先生成一条insert 语句,

insert into Dict_area(acode,area_name,area_code,PY_Code,zipcode,up_code,down_code,arealevel,aimg) values(@acode,@area_name,@area_code,@PY_Code,@zipcode,@up_code,@down_code,@arealevel,@aimg)

再增加参数
for(i=0;i<m_SqlDataReader.FieldCount;i++)
{
if (m_IdentityKey!=m_SqlDataReader.GetName(i))
{
m_SqlCommand.Parameters.Add("@"+m_SqlDataReader.GetName(i),m_SqlDataReader.GetValue(i));
}
}


换成也不行
for(i=0;i<m_SqlDataReader.FieldCount;i++)
{
if (m_IdentityKey!=m_SqlDataReader.GetName(i))
{
m_SqlCommand.Parameters.Add("@"+m_SqlDataReader.GetName(i),(System.Data.SqlDbType)m_DataTable.Rows[i][12],(int)m_DataTable.Rows[i][2]);
}
}
System.InvalidCastException: Specified cast is not valid.

主要原因是
对数据库中的image 字段的类型认为是System.Byte[]
只有在调试中可以查看到正确的类型
m_SqlDataReader.MetaData[8].metaType.SqlType "System.Data.SqlTypes.SqlBinary"
pengy2001 2003-09-08
  • 打赏
  • 举报
回复
sqlConnection myConn=new sqlConnection(connectionstring);
myConn.Open();
sqlCommand myComm=new sqlCommand("select * from table",myConn);
sqlDataReader myReader=myComm.ExecuteReader();
//
int field1=myReader.GetOrdinal("FieldName");
while (myReader.Read())
{
Console.WriteLine("{0}",
myReader.GetValue(field1));
}
cxfidc 2003-09-08
  • 打赏
  • 举报
回复
我用 GetSchemaTable 来处理,

在调试中 m_SqlDataReader.MetaData[8].metaType.SqlType 的值为"{"System.Data.SqlTypes.SqlBinary"}"
在中 DataTable 的值为System.Byte[]

这样是否可行呢?
LevinForum 2003-09-08
  • 打赏
  • 举报
回复
GetSchemaTable已经足够.
cxfidc 2003-09-08
  • 打赏
  • 举报
回复
如何变通呢?我在长沙,有长沙的人可以交流一下吗??
jn_sly 2003-09-08
  • 打赏
  • 举报
回复
变通一下
cxfidc 2003-09-08
  • 打赏
  • 举报
回复
可以用什么方式访问呢???
wangrui821 2003-09-08
  • 打赏
  • 举报
回复
不行。该属性是受保护的。
cxfidc 2003-09-08
  • 打赏
  • 举报
回复
不行的,,

我在程序中直接使用的话,会出现错误..

D:\Inetpub\wwwroot\crm\app\Common\DataControl.cs(226): 'System.Data.SqlClient.SqlDataReader.MetaData' is inaccessible due to its protection level
jn_sly 2003-09-08
  • 打赏
  • 举报
回复
应该可以把,我常用的方法是copy代码到quickwatch,相反应该可以,方法应该也一样
m_SqlDataReader.MetaData[8].metaType.SqlType

110,539

社区成员

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

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

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