webpart中访问SQL 2005 Express数据库问题的处理办法

我的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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xjzdr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值