我的WEBPart代码如下:
1、WebCustomControl1.cs文件:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace LinkDB1
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]
public class WebCustomControl1 : System.Web.UI.WebControls.WebParts.WebPart
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
//操作数据库
output.Write(DB.GetDB_Data());
//output.Write(DB.GetDB_Data());
//output.Write("这是一个用VS2005默认的代码生成的WebPart,命名空间为:LinkDB1,类名为:WebCustomControl1,从WebControl继承,生成的DLL为:LinkDB1.dll。" + Text);
}
}
}
2、DB.cs文件:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
namespace LinkDB1
{
public class DB
{
public static string GetDB_Data()
{
string strStatus = "";
//Data Source=计算机名/SQLEXPRESS;Initial Catalog=数据库名;Persist Security Info=True;User ID=sa;Password=你的密码"
string strConn = "";
System.Data.SqlClient.SqlConnection conn = new SqlConnection("Data Source=MOSS//OFFICESERVERS;Initial Catalog=test;Integrated Security=True");
try
{
conn.Open();
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("A");
}
else
{
Console.WriteLine("B");
}
System.Data.SqlClient.SqlCommand comm = new SqlCommand("select stu_name from Table_1", conn);
strStatus = comm.ExecuteScalar().ToString();
return strStatus;
}
catch (Exception err)
{
strStatus = err.Message.ToString();
return strStatus;
}
finally
{
conn.Dispose();
conn.Close();
}
}
}
3、assemblyinfo.cs文件
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的常规信息通过下列属性集
// 控制。更改这些属性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("LinkDB1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("番茄花园")]
[assembly: AssemblyProduct("LinkDB1")]
[assembly: AssemblyCopyright("版权所有 (C) 番茄花园 2008")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 属性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("79699569-bd5e-4f59-8b1f-2ec8b9add728")]
// 程序集的版本信息由下面四个值组成:
//
// 主版本
// 次版本
// 内部版本号
// 修订号
//
// 可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,
// 方法是按如下所示使用“*”:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
4、修改MOSS中的WEB.config文件:
在 <SafeControls>小节增加一行
<SafeControl Assembly="LinkDB1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Namespace="LinkDB1" TypeName="*" Safe="True" />
到此,如果不是访问数据库的WebPart的话,在MOSS中导入,然后即可使用了。对于访问数据库的webpart,还要做如下的修改。否则虽然可以导入,但在页面上使用该webpart时就会出现错误:
错误内容如下:
请求“System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限已失败。
解决webPart连接数据库的问题的办法:
打开C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/CONFIG/wss_minimaltrust.config文件。
根据不同的版本,出现的目录可能不同,可以在web server extensions目录下搜索一下该文件。
(1)用记事本打开该文件,在SecurityClass小节中加入下面的代码:
<SecurityClass Name="SqlClientPermission"
Description="System.Data.SqlClient.SqlClientPermission, System.Data,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
(2)在<PermissionSet小节的最后,加入下面的代码:
<IPermissionSet class="SqlClientPermission" version="1" Unrestricted="true"/>
说明:网上有些文章说是要找到name="asp.net"的部分,整得我弄了找半天也没有找到。我的MOSS服务器上的这个文件中根本就没有这个name="asp.net"。其实不是这样。只需将这一行加在<IPermission>小节的最后就行了。
<IPermission class="SqlClientPermission" version="1" Unrestricted="true" />
</PermissionSet>
我的完整的wss_minimaltrust.config文件如下:
<configuration>
<mscorlib>
<security>
<policy>
<PolicyLevel version="1">
<SecurityClasses>
<SecurityClass Name="SqlClientPermission" Description="System.Data.SqlClient.SqlClientPermission,System.Data,Version=1.0.5000.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="AllMembershipCondition" Description="System.Security.Policy.AllMembershipCondition, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="AspNetHostingPermission" Description="System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="FirstMatchCodeGroup" Description="System.Security.Policy.FirstMatchCodeGroup, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="NamedPermissionSet" Description="System.Security.NamedPermissionSet"/>
<SecurityClass Name="SecurityPermission" Description="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="StrongNameMembershipCondition" Description="System.Security.Policy.StrongNameMembershipCondition, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UnionCodeGroup" Description="System.Security.Policy.UnionCodeGroup, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="UrlMembershipCondition" Description="System.Security.Policy.UrlMembershipCondition, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<SecurityClass Name="WebPartPermission" Description="Microsoft.SharePoint.Security.WebPartPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"/>
<SecurityClass Name="ZoneMembershipCondition" Description="System.Security.Policy.ZoneMembershipCondition, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</SecurityClasses>
<NamedPermissionSets>
<PermissionSet
class="NamedPermissionSet"
version="1"
Unrestricted="true"
Name="FullTrust"
Description="Allows full access to all resources"
/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="Nothing"
Description="Denies all resources, including the right to execute"
/>
<PermissionSet
class="NamedPermissionSet"
version="1"
Name="SPRestricted">
<IPermission
class="AspNetHostingPermission"
version="1"
Level="Minimal"
/>
<IPermission
class="SecurityPermission"
version="1"
Flags="Execution"
/>
<IPermission class="WebPartPermission"
version="1"
Connections="True"
/>
<IPermission class="SqlClientPermission"
version="1"
Unrestricted="true"
/>
</PermissionSet>
</NamedPermissionSets>
<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="Nothing">
<IMembershipCondition
class="AllMembershipCondition"
version="1"
/>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$AppDirUrl$/_app_bin/*"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="SPRestricted">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$AppDirUrl$/*"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$CodeGen$/*"
/>
</CodeGroup>
<CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="Nothing">
<IMembershipCondition
class="ZoneMembershipCondition"
version="1"
Zone="MyComputer" />
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Microsoft_Strong_Name"
Description="This code group grants code signed with the Microsoft strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Ecma_Strong_Name"
Description="This code group grants code signed with the ECMA strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="00000000000000000400000000000000"
/>
</CodeGroup>
</CodeGroup>
</CodeGroup>
</PolicyLevel>
</policy>
</security>
</mscorlib>
</configuration>
重新刷新页面,即可看到访问webpart访问数据库的结果了。
我的测试是成功的。
测试环境:
Windows 2003+Sp1、VS2005中文版,SQL 2005 express,Sharepoint 2007中文版
生成的DLL为:LinkDB1.dll}