2013-05-22 63 views
3

我對UniData和UniVerse數據庫有一些(有限的)經驗,現在想通過.NET框架與他們合作。看來,現在與他們合作的方式是通過Rocket Software的U2 Toolkit for .NET。因爲我將訪問那些我不會先驗知道的模式的數據庫,所以我需要知道如何查詢數據庫,不僅僅是爲了數據(後面會提到),而是關於數據庫本身的信息,比如現有表格及其模式的名稱。如何獲取有關UniData/UniVerse數據庫的架構信息?

看起來也許Rocket(或者也許是IBM以前擁有U2技術的)擁有一些內置於其某些實用程序中的功能,但我真的需要能夠以編程方式執行此操作。

任何想法?

回答

5

可以使用U2工具包.NET通過以下方式訪問數據庫U2(UniData的或Universe):

  1. SQL訪問(UCI服務器)
  2. 本地訪問(UO服務器)

SQL Access

對於SQL Access,您需要規範化U2 Account(獲取架構)。對於這一點,你可以使用以下工具:

  1. HS.ADMIN(用於數據庫的UniVerse)(http://www.rocketsoftware.com/u2/products/u2-clients-and-db-tools/u2-resources/universe-11.1-clients/copy_of_uvodbc-v11r1.pdf/view
  2. VSG(用於數據庫的UniData)
  3. MDM(爲的UniVerse數據庫和UniData的數據庫)

可以使用U2工具包.NET的U2數據庫提供的.NET(ADO.NET提供商)的SQL訪問

本地訪問

對於本機訪問,您不需要執行任何操作。

您可以使用U2 Toolkit for .NET的UO API進行本地訪問。

示例代碼和MSDN樣式幫助

有當您安裝的產品。SQL訪問和本地訪問噸的示例代碼。

最好的辦法是安裝U2 Toolkit for .NET V 1.2.1並開始開發一些代碼。您可以使用樣本數據庫運行幾乎所有樣本('HS.SALES'UniVerse帳戶和'演示'UniData帳戶)

您還可以閱讀U2 Toolkit for .NET V 1.2.1的MSDN樣式幫助以獲取以下信息建築,帳戶存取/獲取模式,樣本代碼等

enter image description here

我與的UniData的模擬賬戶試驗U2Connection類的的getSchema()。這個對我有用。請參閱下面的截圖。

enter image description here

private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      U2ConnectionStringBuilder conn_str = new U2ConnectionStringBuilder(); 
      conn_str.UserID = "user"; 
      conn_str.Password = "pass"; 
      conn_str.Server = "localhost"; 
      conn_str.Database = "demo"; 
      conn_str.ServerType = "UNIDATA"; 
      conn_str.Pooling = false; 
      string s = conn_str.ToString(); 
      U2Connection con = new U2Connection(); 
      con.ConnectionString = s; 
      con.Open(); 
      this.textBox2.AppendText("Connected......."+Environment.NewLine); 
      this.textBox2.AppendText("CALLING ....... DataTable dt = con.GetSchema(\"Tables\");"+Environment.NewLine); 
      DataTable dt = con.GetSchema("Tables"); 
      this.dataGridView1.DataSource = dt.DefaultView; 
      con.Close(); 
         } 
     catch (Exception e2) 
     { 

      this.textBox2.AppendText(e2.Message); 
     } 
    } 

它看起來像你的「示範」的帳戶不被標準化。你可以從TCL命令運行「sql> select * from SQLTables」。你看到以下內容嗎? 如果沒有,那麼你可以做下列操作之一:

  1. 運行VSG工具(讀VSG手冊)
  2. 運行MDM工具(閱讀MDM手冊)從TCL命令
  3. 運行命令行:

    o Convert.sql STUDENT (Read Unidata Manual for convert.sql command) 
    o Grant privilege 
    o MIGRATE.SQL 
    

enter image description here

+0

拉詹 - 感謝你的幫助。這當然讓我朝着正確的方向前進。我已經成功連接到本地數據庫,但是我正在尋找的具體事情(即以編程方式獲取所有表的列表)仍然沒有解決。 我想我需要使用GetSchema()方法,但是當我將它傳遞給U2MetaDataCollectionNames.Tables時,我沒有返回任何行。這是針對演示Unidata數據庫運行的。 – ksigmund

+0

請參閱上面的答案。 –

+0

再次感謝Rajan。使用UniVerse,我的頭腦更好。也許這是值得一個新的問題,但是有什麼辦法可以確定GetSchema方法返回的表是其他表的子表嗎? 例如,在HS.SALES中,有一個CUSTOMER表,其中包含,我相信一個MV_ORDERS表。當調用GetSchema時,其中兩個表是CUSTOMER(這很合理)和CUSTOMER_ORDERS。我可以根據命名慣例推斷他們的關係嗎? – ksigmund

1

U2 Toolkit for .NET v1.3.0在GetSchema()API中支持「ForeignKeys」和「ForeignKeysColumns」。 見下圖1,圖2,圖3和圖4。

Fig1

Fig2

Fig3

Fig4

+0

拉詹工作,我可以調用無參數的getSchema()方法,而是嘗試使用上面的代碼時,我得到如下: [U2] [UCINET-UO] [U2] [UCINET] [宇宙]:「* HS.OLEDBINFO」不在目錄空間 – ksigmund

+0

你可以運行你的應用程序作爲管理員什麼是Universe的版本什麼是OS(譯註)你安裝V1.3.0。??? ?我從來沒有見過這個錯誤 –

+0

我聯繫了[email protected],顯然UniVerse PE的最新安裝程序存在問題,UniData PE似乎沒問題。 – ksigmund

相關問題