从数据库中选择

本文关键字:选择 数据库 | 更新日期: 2023-09-27 18:12:58

我一直在绞尽脑汁,试图找出如何在c#中使用SMO执行SELECT from Table并将该值返回给字符串项。

我已经看到了如何从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();
        }

从数据库中选择

修改代码为:

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

"USE DATABASE;",首先,您可能不需要它。其次,如果你的意思是"使用MyDatabaseName;",请尝试在名称后加上分号。

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

Console.Writeline (ds.GetXml );

然后你会"看到"数据集,数据表,数据表中的行,从中"抽取"你的标量值。

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",这是我的记忆

我的代码是未经内存测试的,所以对它持保留态度

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

您正在寻找的值将在DataSet中的DataTable对象中。再次运行代码并在sDealerName行中断。然后使用放大镜工具点击它打开数据集查看器,你就可以从那里找到剩下的了。