2013-05-09 68 views
0

我一直在試圖弄清楚如何在C#中使用SMO執行SELECT表,並將該值返回給字符串項。C#SMO從數據庫中選擇

我看過多篇文章,講述如何從C#中運行SQL腳本,這不是我想要做的。這裏是我的代碼到目前爲止

public static void GetDealerInfo() 
    { 
     Server databaseServer = new Server(dbServer); 
     try 
     { 
      databaseServer.ConnectionContext.LoginSecure = dbSecure; 
      databaseServer.ConnectionContext.Login = dbUser; 
      databaseServer.ConnectionContext.Password = dbPass; 
      databaseServer.ConnectionContext.Connect(); 


      sDealerName = databaseServer.ConnectionContext.ExecuteWithResults("USE DATABASE Select DataValue from TABLE where KEYField = 'DealershipName'").ToString(); 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex); 
     } 
     finally 
     { 
      if (databaseServer.ConnectionContext.IsOpen) 
      { 
       databaseServer.ConnectionContext.Disconnect(); 
      } 
     } 
    } 

我也有一個叫sDealerName字符串這是我想拉,所有我得到的是 sDealerName = System.Data.DataSet中

任何人都可以點我在正確的方向?

UPDATE:

下面是代碼開始下載或者至少是爲我工作

try 
     { 
      databaseServer.ConnectionContext.LoginSecure = dbSecure; 
      databaseServer.ConnectionContext.Login = dbUser; 
      databaseServer.ConnectionContext.Password = dbPass; 
      databaseServer.ConnectionContext.DatabaseName = dbDatabase; 
      databaseServer.ConnectionContext.Connect(); 

      DataSet dsName = databaseServer.ConnectionContext.ExecuteWithResults("Select DataValue from ABSetup where KEYField = 'DealershipName'"); 

      sDealerName = dsName.Tables[0].Rows[0][0].ToString(); 

      DataSet dsNum = databaseServer.ConnectionContext.ExecuteWithResults("Select DataValue from ABSetup where KEYField = 'ABOfficeCID'"); 

      sDealerNumber = dsNum.Tables[0].Rows[0][0].ToString(); 
     } 
+0

您可以使用此代碼試驗1次數據庫訪問。你只需要以不同的方式從數據集中「採集」這些值。 DataSet dsName = databaseServer.ConnectionContext.ExecuteWithResults(「從ABSetup中選擇DataValue,其中KEYField IN('DealershipName','ABOfficeCID')」); – granadaCoder 2013-05-09 20:31:27

回答

0

更改您的代碼:

DataSet ds = databaseServer.ConnectionContext.ExecuteWithResults("USE DATABASE Select DataValue from TABLE where KEYField = 'DealershipName'"); 

然後做一個

Console.Writeline (ds.GetXml); 

然後你會 「看到」 的DataSet,DataTable中,數據表中的行,從該 「拔毛」你的標量值。

string value = string.Empty; 

if(null!=ds) { 
if(null!=ds.Tables) { 
if(ds.Tables.Count > 0) { 
if(null!=ds.Tables[0].Rows) { 
if(ds.Tables[0].Rows.Count > 0) { 
if(null!=ds.Tables[0].Rows[0].Columns){ 
if(ds.Tables[0].Rows[0].Columns.Count > 0) 
{ 
value = ds.Tables[0].Rows[0].Columns[0].Value; 
}}}}}}} 

「計數」可能是「長度」,我將從記憶中。

我的代碼沒有經過內存測試,所以拿一粒鹽。

+0

無法正常工作我很遺憾 – ondrovic 2013-05-09 18:58:43

+0

你的例外是什麼? – granadaCoder 2013-05-09 19:01:49

+0

這個URL有一個VB.NET示例。它顯示瞭如何查看非強類型數據集中的值。轉換到C#將是微不足道的。 http://msdn.microsoft.com/en-us/library/ms205775.aspx – granadaCoder 2013-05-09 19:03:25

1

你調用對象實例的ToString()這就是爲什麼你得到完全合格的類型名稱。

您正在查找的值將位於DataSet內的DataTable對象內。再次運行您的代碼,並在sDealerName行中斷開。然後使用放大鏡工具單擊該按鈕打開數據集查看器,然後您可以從其中找出其餘部分。