0

我一直在绞尽脑汁想弄清楚如何在 C# 中使用 SMO 从 Table 执行 SELECT 并将该值返回到字符串项。

我看过多篇关于如何在 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

谁能指出我正确的方向?

更新:

这是让它运行的代码,或者至少是对我有用的代码

 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();
        }
4

2 回答 2

1

您在对象实例上调用 ToString() ,这就是您获得完全限定类型名称的原因。

您要查找的值将DataTable位于DataSet. 再次运行您的代码并在 sDealerName 行中断。然后使用放大镜工具单击它以打开数据集查看器,您将能够从那里找出其余部分。

于 2013-05-09T18:20:08.570 回答
1

将您的代码更改为:

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

“USE DATABASE;”,首先,你可能不需要它。其次,如果您的意思是“使用我的数据库名称;” , 名称后加分号试试。

对你的问题更重要:然后做一个

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;
}}}}}}}

“计数”可能是“长度”,我从记忆中开始。

我的代码未经内存测试,因此请谨慎对待。

于 2013-05-09T18:32:02.207 回答