我很难将C#Dll导入另一个简单的测试应用程序(控制台,winform,您命名)。
基本上,它包含在一个庞大的图书馆中,该图书馆使用了欧洲共同体增值税检查服务(我认为该网址是增值税网络服务)。
该服务使您可以下载库,然后由您决定代码的实现。
我所做的是启动Visual Studio 2010中新的C#类库,然后加入这个类被自动从web服务下载供自己使用,然后写了这个片断我在网络上找到。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;
namespace EuroVAT
{
public class EuroVAT
{
public static Array check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
}
}
好了,当我创建一个新的控制台应用程序时,然后向从类库项目编译的DLL中添加一个引用(右键单击项目名称,添加引用,浏览到dll),其中包括我在此处链接/引用的2个类。
这是我尝试使用dll的一些代码:
using EuroVAT;
namespace DLLTEST
{
class Program
{
static void Main(string[] args)
{
EuroVat test = new EuroVat();
}
}
}
基本上,我无法从程序中调用它们。当我尝试调用EuroVAT对象时,我得到的只是
错误1找不到类型或名称空间名称'EuroVAT'(您是否缺少using指令或程序集引用?)
我试图建立,关闭,重新打开项目。试图将其放在Winforms中,依旧无济于事。我总是得到那个错误。
我究竟做错了什么?我该怎么解决?
还有一个问题:
这段代码到底在做什么?
return new object[] {country,
vatNum,
valid,
name,
address
};
就像返回对象数组一样?因为当我运行程序时,所有输出都被扔掉了。通常我必须通过某种循环来循环输出...
最后一个问题,如果有人可以帮助您:
我必须将此DLL包含在SQL Server中(我认为是2008年)
我已经读过有关该主题的文章,发现要从C#dll向SQL Server传递值,您必须包含各种库并将您的方法声明为SqlProcedures,而且还必须将值作为SqlTypes(SqlInt32,SqlString等)传递/检索。
这是我想出的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace WebServiceVatEuropa
{
class Program
{
[SqlProcedure]
public static Array check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
}
}
我希望这是正确的。我所缺少的是如何将所有这些对象强制转换为SqlInt32,SqlString等SqlType。我尝试了一下,但遇到了大量的转换错误之类的东西。它只是不允许我在SqlTypes中声明这些对象,并且我无法计算出最后一个return语句以输出那些SqlType。
如有可能,任何人都可以举个例子吗?
谢谢你们。
您的班级宣告为EuroVAT
。而您初始化类型的对象EuroVat
。检查寄存器另外,尝试给您的名称空间和类指定不同的名称
这:
return new object[] {country,
vatNum,
valid,
name,
address
};
创建的阵列object
类型,并与填充它(object)country
,(object)vatNum
,(object)valid
等
如果我做对了,您打算如何使库与SQL Server交互,则问题出在此数组上。这些SQL类型,如SqlInt32
,SqlString
,SqlBinary
,等确实有隐式转换操作符对应的类型,如int
,string
。但是由于数组包含object
实例,所以无法应用隐式转换。那是一面。另一方面,SQL Server获得的结果object[]
,而不能仅仅处理它。它不知道如何。我认为您应该考虑使用数据访问框架来处理数据库,例如普通的ADO.NET或实体框架,等等。我实际上无法弄清您提供的这些存储过程的意图。
编辑:
尝试通过以下方式将结果传递到SQL Server SqlContext
:
[SqlProcedure]
public static void UserService(string country, stringvatNum)
{
object[] serverResponse = CheckService(country, vatNum);
// Variables.
SqlMetaData column1Info;
SqlDataRecord record;
// Create the column metadata.
column1Info = new
SqlMetaData("Column1", SqlDbType.Variant);
// Create a new record with the column metadata.
record = new SqlDataRecord(new SqlMetaData[]{column1Info});
// Mark the begining of the result-set.
SqlContext.Pipe.SendResultsStart(record);
foreach (var o in serverResponse)
{
record.SetValue(0, o);
SqlContext.Pipe.SendResultsRow(record);
}
// Mark the end of the result-set.
SqlContext.Pipe.SendResultsEnd();
}
public static object[] CheckService(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService
vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句