51Testing软件测试论坛

标题: C#如何返回数组,生成Dll,供QTP调用 [打印本页]

作者: kavensyw    时间: 2010-9-28 10:24
标题: C#如何返回数组,生成Dll,供QTP调用
本帖最后由 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


作者: kavensyw    时间: 2010-9-28 10:33
本帖最后由 kavensyw 于 2010-9-28 10:39 编辑

我后来想了个方法:把查询到的值,用逗号等分隔符连接起来,QTP获取字符串,再用Split拆分
但也有个问题,如果列太多,字符串会过长
不知道有啥直接的方法
作者: shanxi    时间: 2010-9-28 14:51
本帖最后由 shanxi 于 2010-9-28 15:19 编辑

[ComVisible(true)]

VBS只能识别Variants类型的数组
作者: kavensyw    时间: 2010-9-28 15:38
本帖最后由 kavensyw 于 2010-9-28 15:40 编辑

回复 3# shanxi

我从C#中用public string myData{}返回单个字符串,VBS可以轻易获取
那如果从C#中用public string[] myData{}返回结果,VBS能识别吗,有无方法获取?
作者: shanxi    时间: 2010-9-28 16:09
VBS            C#
Variant       object
作者: kavensyw    时间: 2010-9-28 16:21
回复 5# shanxi

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




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2