51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3384|回复: 5
打印 上一主题 下一主题

[原创] C#如何返回数组,生成Dll,供QTP调用

[复制链接]
  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2010-9-28 10:24:33 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    本帖最后由 kavensyw 于 2010-9-28 10:28 编辑

    期望目标:C#连接数据库,查询,返回其中一列的所有值,编译后,生成dll,供QTP调用

    我使用的方法:1、返回string数组;2、返回dictionary;3、返回List<string>

    由于C#vbs识别的类型不一样,我感觉返回string数组应该是最靠谱的,但也没成功。

    请各位大侠教教我该如何来处理?

    题外话:为何这两天我在论坛按CTrl+Shift切换语言,常无响应,其他网页正常。是我的输入法问题?

    C#代码如下,编译后生成dll

    using System;

    using System.Collections.Generic;

    using System.Data.SqlClient;

    using System.Data;

    namespace SqlTest

    {

        public class SelectTest


    {

            private Dictionary<int, string> dic;

            public Dictionary<int,string> myData


    {

                get { return dic; }


    }

            public void GetData(string strCnn, string strCmd)


    {

                SqlConnection conn;

                SqlCommand cmd;


    dic =
    new Dictionary<int, string>();



    conn =
    new SqlConnection(strCnn);


    cmd =
    new SqlCommand(strCmd, conn);


    conn.Open();

                SqlDataReader dReader;

                //returnData = new List<string>();


    dReader = cmd.ExecuteReader(
    CommandBehavior.CloseConnection);

                for(int i=0;dReader.Read()!=false;++i)


    {


    dic.Add(i, dReader[1].ToString());


    }


    }


    }

    }


    QTP代码:

    Dim testObj  '调用.net的对象

    Dim strCnn  '数据库连接字符串

    Dim strCmd  '查询指令

    Dim msgDic  'Dicitionary对象

    strCnn ="Data Source=IP地址;Initial Catalog=数据库;User ID=用户名;password=密码"

    Set test Obj=DotNetFactory.CreateInstance("SqlTest.SelectTest","H:\Test\ClassLibrary1\

    ClassLibrary1\obj\Release\ClassLibrary1.dll")

    strCmd = "select * from Address"

    testObj.GetData strCnn,strCmd

    '下面该如何调用myData返回数组?

    msgDic = testObj.myData

    msgbox msgDic.Items(0)

    Set msgDic = Nothing

    Set testObj = Nothing

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    6#
     楼主| 发表于 2010-9-28 16:21:29 | 只看该作者
    回复 5# shanxi

    是啊,我用TypeName,C#返回过来的就3种int,string,object
    那就没法子用C#一次返回多个数据了吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2010-9-28 16:09:19 | 只看该作者
    VBS            C#
    Variant       object
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    4#
     楼主| 发表于 2010-9-28 15:38:01 | 只看该作者
    本帖最后由 kavensyw 于 2010-9-28 15:40 编辑

    回复 3# shanxi

    我从C#中用public string myData{}返回单个字符串,VBS可以轻易获取
    那如果从C#中用public string[] myData{}返回结果,VBS能识别吗,有无方法获取?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2010-9-28 14:51:06 | 只看该作者
    本帖最后由 shanxi 于 2010-9-28 15:19 编辑

    [ComVisible(true)]

    VBS只能识别Variants类型的数组
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    2#
     楼主| 发表于 2010-9-28 10:33:16 | 只看该作者
    本帖最后由 kavensyw 于 2010-9-28 10:39 编辑

    我后来想了个方法:把查询到的值,用逗号等分隔符连接起来,QTP获取字符串,再用Split拆分
    但也有个问题,如果列太多,字符串会过长
    不知道有啥直接的方法
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-9 05:06 , Processed in 0.071223 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表