2013-05-09 69 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行中断开。然后使用放大镜工具单击该按钮打开数据集查看器,然后您可以从其中找出其余部分。