以下两个函数,干的是一个事情,在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一个垃圾!!!

解决方案 »

  1.   


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

  2.   

    我很少用ado.net 一个项目 一般只用到一种类型数据库吧 为什么非要用到他呢
      

  3.   

    如果是产品,就要考虑不同的数据库平台,当然也要取不同数据库的元数据信息,我也是接触 ADO。NET 不久,这样的东西对微软来说都很难搞的定么那其他的ORM就不用再说了,不知道这里有无大湿给解答一下,问题出在哪里???
      

  4.   

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

  5.   

    楼上的大湿懂的话可以赐教!本人是刚用 .net  。你说的不错,代码是很垃圾,但我不相信微软的技术比我还垃圾!你给证明下
      

  6.   


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

  7.   

    这么说的确很伤学习.net的同学们的感情但是真没办法,微软搞的一大堆复杂的设计,我真佩服你们,跟着微软继续跑。看看JAVA里面幽雅的设计,再搞搞.net真是让我吐血,楼上一个哥们说我没明白数据提供者及数据库连接对象你说的不错。作为应用层开发的,明白那么多。。真的很牛B让我们再看看。net和java 关于connection的设计。java是用url连接,.net使用连接串,按说都一样,但。net的连接串又要使用不同的连接对象。sqlconnection/oledeconnection/等等。。请问,对于上层程序来说,为什么要关心这个??而java 只是Connection..搞定一切。底下的东西指定一个连接驱动就可以了
    搞。NET的确混口饭吃。。小公司是搞Winform开发的。这个哥也没办法,不过看情况,公司又准备搞云计算。SAAS我接触。NET时间不长。。真不知道。NET能做哪块的东西??发发牢骚,楼上一个五星的哥们提醒的不错“微软的ADO.NET没有提供通用的取DESCRIPTION的功能。”,看看返回的结果集。。里面倒有DESCRIPTION。。这个微软不是误导吗??
    其实我开个帖子的意思,就是等大牛的一句话,你说这个不行。我就不搞这个了。咱另寻路子,总能搞定是不?
      

  8.   

    http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.aspx有些数据库如果连字段备注描述这个东西都没有,你是不是也要ado.net提供一个出来?
      

  9.   


    dbproviderfactory  ???   不是一个层次上的东西吧。ado.net 既然是个数据访问层,就应该是个标准,如果数据库有特例,那对这个标准没什么影响吧。无非是取不出来而已,但现在是已经有标准了,数据库也有东西,但就是取不出来。难道各位老大认为很正常??