微软的技术真是够垃圾的,GetSchema ,GetOleDbSchemaTable 在不同数据库上表现不同

白驼山宋兵甲 2012-04-24 05:30:03
以下两个函数,干的是一个事情,在Access上和sql server 以及oracle 的表现各有不同。。。


DESCRIPTION 信息在Access 里能取到,
在其他数据库上取不出来

实在无语。。。微软的技术真是够垃圾的

搞了半天,仍要写SQL取数据库的结构信息!!!!那微软封装这样的API干吗呢。其他属性两个接口返回同样的东西,一个是数值,一个是enum的定义。。。实在喷血啊。

public DataTable GetColumns(string ConnectionStr, string tbname)
{
try
{
if (ConnectionStr != null && tbname != null)
{
SqlConnection con = new SqlConnection(ConnectionStr);
con.Open();
DataTable columnInfo = con.GetSchema(
System.Data.SqlClient.SqlClientMetaDataCollectionNames.Columns,
new string[] { null, null, tbname, null }
);
con.Close();
return columnInfo;
}
}
catch (System.Exception ex)
{
Trace.WriteLine(ex.Message);
}


return null;
}



public DataTable GetColumns(string ConnectionStr, string tbname)
{
try
{
if (ConnectionStr != null && tbname != null)
{
OleDbConnection con = new OleDbConnection(ConnectionStr);
con.Open();
DataTable columnInfo = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, tbname, null });
con.Close();
return columnInfo;
}
}
catch (System.Exception ex)
{
Trace.WriteLine(ex.Message);
}

return null;
}


搞了一大堆的什么这个connection ,那个connection ... 不如JDBC一个。。。

垃圾!!!

...全文
437 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
白驼山宋兵甲 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.aspx

有些数据库如果连字段备注描述这个东西都没有,你是不是也要ado.net提供一个出来?
[/Quote]



dbproviderfactory ??? 不是一个层次上的东西吧。

ado.net 既然是个数据访问层,就应该是个标准,如果数据库有特例,那对这个标准没什么影响吧。无非是取不出来而已,

但现在是已经有标准了,数据库也有东西,但就是取不出来。。。。难道各位老大认为很正常??

种草德鲁伊 2012-04-26
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.aspx

有些数据库如果连字段备注描述这个东西都没有,你是不是也要ado.net提供一个出来?
白驼山宋兵甲 2012-04-26
  • 打赏
  • 举报
回复
这么说的确很伤学习.net的同学们的感情。。。但是真没办法,微软搞的一大堆复杂的设计,我真佩服你们,跟着微软继续跑。

看看JAVA里面幽雅的设计,再搞搞.net真是让我吐血,楼上一个哥们说我没明白数据提供者及数据库连接对象。。。你说的不错。作为应用层开发的,明白那么多。。真的很牛B

让我们再看看。net和java 关于connection的设计。java是用url连接,.net使用连接串,按说都一样,但。net的连接串又要使用不同的连接对象。sqlconnection/oledeconnection/等等。。请问,对于上层程序来说,为什么要关心这个??

而java 只是Connection..搞定一切。底下的东西指定一个连接驱动就可以了


搞。NET的确混口饭吃。。小公司是搞Winform开发的。这个哥也没办法,不过看情况,公司又准备搞云计算。SAAS。。。我接触。NET时间不长。。真不知道。NET能做哪块的东西??

发发牢骚,楼上一个五星的哥们提醒的不错“微软的ADO.NET没有提供通用的取DESCRIPTION的功能。”,看看返回的结果集。。里面倒有DESCRIPTION。。这个微软不是误导吗??


其实我开个帖子的意思,就是等大牛的一句话,你说这个不行。我就不搞这个了。咱另寻路子,总能搞定是不?


baiwenyu 2012-04-24
  • 打赏
  • 举报
回复
来看了下 ,感觉很不爽,想说点什么,欲言又止。。。。。。
蔡袅 2012-04-24
  • 打赏
  • 举报
回复
不解释,不掩饰。
fisher_85 2012-04-24
  • 打赏
  • 举报
回复
哎,满瓶子水不响,半瓶子水咣当。。。
每种技术都各有优缺点,动不动就说别人的东西垃圾,既然垃圾,那就不要用呗,全部自己写好了
烈火蜓蜻 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

是自己的技术垃圾还是微软技术垃圾?
一看你的代码就是未入门的水平,从你的抱怨中看出你连最基本的几个.net数据提供者及数据库连接对象都不懂
[/Quote]

初学者,切忌浮躁。。。

有些字符串在有些数据库中有关键字,有些则不是。有些数据库有些特征是其它数据库里没有的。你现在取的是数据库的结构,同学,微软的ADO.NET没有提供通用的取DESCRIPTION的功能。

并不是他垃圾。
白驼山宋兵甲 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

是自己的技术垃圾还是微软技术垃圾?
一看你的代码就是未入门的水平,从你的抱怨中看出你连最基本的几个.net数据提供者及数据库连接对象都不懂
[/Quote]


楼上的大湿懂的话可以赐教!

本人是刚用 .net 。你说的不错,代码是很垃圾,但我不相信微软的技术比我还垃圾!你给证明下

「已注销」 2012-04-24
  • 打赏
  • 举报
回复
是自己的技术垃圾还是微软技术垃圾?
一看你的代码就是未入门的水平,从你的抱怨中看出你连最基本的几个.net数据提供者及数据库连接对象都不懂
白驼山宋兵甲 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

我很少用ado.net

一个项目 一般只用到一种类型数据库吧 为什么非要用到他呢
引用 6 楼 的回复:

引用 1 楼 的回复:

哎~
这也能抱怨
就如
中国15E人口
每个人都是人,但是每个人拥有的财富,资源,知识 都是不同的

你不能抱怨 这个人懂英语懂汉语 而那个人只懂汉语


这个怎么能类比呢。。ADO。NET 就是要屏蔽各种数据库的差别才搞的……
[/Quote]


如果是产品,就要考虑不同的数据库平台,当然也要取不同数据库的元数据信息,我也是接触 ADO。NET 不久,这样的东西对微软来说都很难搞的定么。。。

那其他的ORM就不用再说了,不知道这里有无大湿给解答一下,问题出在哪里???







rayyu1989 2012-04-24
  • 打赏
  • 举报
回复
我很少用ado.net

一个项目 一般只用到一种类型数据库吧 为什么非要用到他呢
[Quote=引用 6 楼 的回复:]

引用 1 楼 的回复:

哎~
这也能抱怨
就如
中国15E人口
每个人都是人,但是每个人拥有的财富,资源,知识 都是不同的

你不能抱怨 这个人懂英语懂汉语 而那个人只懂汉语


这个怎么能类比呢。。ADO。NET 就是要屏蔽各种数据库的差别才搞的一个数据访问层,既然搞了,还没擦干净屁股。。。还要用SQL来继续搞这个,搞那个。。。
[/Quote]
白驼山宋兵甲 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

哎~
这也能抱怨
就如
中国15E人口
每个人都是人,但是每个人拥有的财富,资源,知识 都是不同的

你不能抱怨 这个人懂英语懂汉语 而那个人只懂汉语
[/Quote]

这个怎么能类比呢。。ADO。NET 就是要屏蔽各种数据库的差别才搞的一个数据访问层,既然搞了,还没擦干净屁股。。。还要用SQL来继续搞这个,搞那个。。。




色拉油 2012-04-24
  • 打赏
  • 举报
回复
不同的语言有不同的特性
zh6335901 2012-04-24
  • 打赏
  • 举报
回复
留给楼下吐槽。
种草德鲁伊 2012-04-24
  • 打赏
  • 举报
回复
消灭垃圾的重任就交给楼下的大湿们了。
rayyu1989 2012-04-24
  • 打赏
  • 举报
回复
哎~
这也能抱怨
就如
中国15E人口
每个人都是人,但是每个人拥有的财富,资源,知识 都是不同的

你不能抱怨 这个人懂英语懂汉语 而那个人只懂汉语

111,126

社区成员

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

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

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