2013-05-09 4 views
0

Я пытаюсь понять, как выполнить SELECT из таблицы с помощью SMO в C# и вернуть это значение в строковый элемент.C# SMO Выбор из базы данных

Я видел несколько сообщений о том, как я могу запускать SQL-скрипт из C#, который не является тем, что я хочу делать. Вот код, у меня до сих пор

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 («Выберите DataValue из ABSetup, где KEYField IN (« DealershipName »,« ABOfficeCID »)»; – granadaCoder

ответ

0

Измените свой код:

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

Затем сделать

Console.Writeline (ds.GetXml); 

Затем вы "видеть" DataSet, то DataTable, строка внутри 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; 
}}}}}}} 

«Count» может быть «Length», я собираюсь из памяти.

Мой код непроверен из памяти, поэтому возьмите его с солью.

+0

не работает Я так потерялся – ondrovic

+0

Какое ваше исключение? – granadaCoder

+0

В этом URL-адресе есть пример VB.NET. И он показывает, как смотреть на значения в не-строго типизированном наборе данных. Преобразование в C# было бы тривиальным. http://msdn.microsoft.com/en-us/library/ms205775.aspx – granadaCoder

1

Вы звоните ToString() на экземпляр объекта, который является, почему вы получаете полное имя типа.

Ценность, которую вы ищите, будет находиться внутри объекта DataTable в пределах DataSet. Запустите код снова и перерыв в строке sDealerName. Затем, используя инструмент увеличительного стекла, щелкните по нему, чтобы открыть средство просмотра набора данных, и вы сможете увидеть остальное оттуда.

Смежные вопросы