自写了一个WebPart 用DataRead列出数据,准备
部署在SharePoint服务器上,想想很容易,一路顺利,可是将导入的WebPart拽到页面时,出来这个错误:
An Error has occurred: Request for the permission of type System.Data.SqlClient.SqlClientPermission, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 failed.
看来WebPart访问SQL有问题:
于是。在WSS的webConfig文件中添加下列两行:
<
SafeControlAssembly
=
"
System.Data,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
"
Namespace
=
"
System.Data.SqlClient
"
TypeName
=
"
*
"
Safe
=
"
True
"
/>
<
SafeControlAssembly
=
"
System.Data,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
"
Namespace
=
"
System.Data
"
TypeName
=
"
*
"
Safe
=
"
True
"
/>
还是不行,
又在C:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/60/config/wss_minimaltrust.config文件中添加下面一行:
<
SecurityClassName
=
"
SqlClientPermission
"
Description
=
"
System.Data.SqlClient.SqlClientPermission,System.Data,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
"
/>
服务器 iisreset后 还是不行!
这可怪了! 再到服务器上一看,原来数据库采用Windows身份验证模式,而不是混合验证模式
于是,再次将服务器上的ASPNET帐号户设置为所有数据库访问权
还是不行
怀疑是.net运行权限不够
再次在服务器中"信任程序集",将服务器上的System.dll的程序集权限设主完全信任!
还是不行!我晕
再捍源码中连接串如下:
"Data Source=sp-hgh;Initial Catalog=NorthWind;uid-sa;pwd=;"
马上改为:
"Data Source=sp-hgh;Initial Catalog=NorthWind;Integrated Security=SSPI;Trusted_Connection=yes;"
结果还是出不来数据
唉!整个一郁闷
最后捍了XGP的文章《[url=http://xgp1226.blogdriver.com/xgp1226/598244.html]Web部件访问SQL数据库--寻找收获的快乐[/url]》一文,深受启发,又参考MSDN文档,终于成功!
方法:
然后在wss_minimaltrust.config文件(在Webconfig文件中查找文件的位置)的<SecurityClass>节点中加入子节点:
<
SecurityClassName
=
"
SqlClientPermission
"
Description
=
"
System.Data.SqlClient.SqlClientPermission,System.Data,Version=1.0.5000.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
"
/>
,
<
SecurityClassName
=
"
SharePointPermission
"
Description
=
"
Microsoft.SharePoint.Security.SharePointPermission,Microsoft.SharePoint.Security,Version=11.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c
"
/>
再在ASP.net(注意必须)的<PermissionSet>节点中加入子节点:
<
IPermission
class
=
"
SqlClientPermission
"
version
=
"
1
"
Unrestricted
=
"
true
"
/>
<
IPermission
class
=
"
SharePointPermission
"
version
=
"
1
"
ObjectModel
=
"
True
"
/>
再重启IIS
iisreset 后, 一切OK!
我的源码如下:
using
System;
using
System.ComponentModel;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Xml.Serialization;
using
Microsoft.SharePoint;
using
Microsoft.SharePoint.Utilities;
using
Microsoft.SharePoint.WebPartPages;
using
System.Data;
using
System.Data.SqlClient;
namespace
NewDispData
...
{
/**/
///
<summary>
///
DescriptionforWebPart1.
///
</summary>
[DefaultProperty(
"
Text
"
),
ToolboxData(
"
<{0}:WebPart1runat=server></{0}:WebPart1>
"
),
XmlRoot(Namespace
=
"
NewDispData
"
)]
public
class
NewDispData:Microsoft.SharePoint.WebPartPages.WebPart
//
,ICellConsumer
//
,IRowProvider
...
{
webPart变量
#region
webPart变量
private
const
string
defaultText
=
""
;
private
string
text
=
defaultText;
[Browsable(
true
),
Category(
"
Miscellaneous
"
),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName(
"
Text
"
),
Description(
"
TextProperty
"
)]
public
string
Text
...
{
get
...
{
return
text;
}
set
...
{
text
=
value;
}
}
const
string
connectionStr
=
"
server=downmoon-hgh;database=NorthWind;uid=sa;pwd=sa;
"
;
//
protected
LabelErrorLabel;
protected
DataGridOrdersGrid;
SqlConnectionNorthWindConnection
=
new
SqlConnection(connectionStr);
SqlDataAdapterNorthWindAdp
=
null
;
DataSetNorthWindDataSet
=
null
;
private
int
_connectionCount
=
1
;
#endregion
创建子控件
#region
创建子控件
protected
override
void
CreateChildControls()
...
{
//
Thislabelisdisplayedonlyif
//
anexceptionisthrownwhileattempting
//
toloadthedata.
ErrorLabel
=
new
Label();
ErrorLabel.Visible
=
false
;
Controls.Add(ErrorLabel);
//
Createthedatagrid
OrdersGrid
=
new
DataGrid();
BoundColumnnewColumn;
OrdersGrid.Load
+=
new
EventHandler(OrdersLoad);
OrdersGrid.AllowPaging
=
false
;
OrdersGrid.HeaderStyle.Font.Bold
=
true
;
OrdersGrid.HeaderStyle.Wrap
=
false
;
OrdersGrid.GridLines
=
System.Web.UI.WebControls.GridLines.Both;
OrdersGrid.AutoGenerateColumns
=
false
;
//
Definegridcolumns
newColumn
=
new
BoundColumn();
newColumn.DataField
=
"
OrderID
"
;
newColumn.HeaderText
=
"
OrderID
"
;
newColumn.ItemStyle.HorizontalAlign
=
HorizontalAlign.Right;
OrdersGrid.Columns.Add(newColumn);
newColumn
=
new
BoundColumn();
newColumn.DataField
=
"
CustomerID
"
;
newColumn.HeaderText
=
"
CustomerID
"
;
OrdersGrid.Columns.Add(newColumn);
newColumn
=
new
BoundColumn();
newColumn.DataField
=
"
OrderDate
"
;
newColumn.HeaderText
=
"
OrderDate
"
;
newColumn.DataFormatString
=
"
{0:d}
"
;
newColumn.ItemStyle.HorizontalAlign
=
HorizontalAlign.Right;
OrdersGrid.Columns.Add(newColumn);
newColumn
=
new
BoundColumn();
newColumn.DataField
=
"
RequiredDate
"
;
newColumn.HeaderText
=
"
RequiredDate
"
;
newColumn.DataFormatString
=
"
{0:d}
"
;
newColumn.ItemStyle.HorizontalAlign
=
HorizontalAlign.Right;
OrdersGrid.Columns.Add(newColumn);
newColumn
=
new
BoundColumn();
newColumn.DataField
=
"
ShippedDate
"
;
newColumn.HeaderText
=
"
ShippedDate
"
;
newColumn.DataFormatString
=
"
{0:d}
"
;
newColumn.ItemStyle.HorizontalAlign
=
HorizontalAlign.Right;
OrdersGrid.Columns.Add(newColumn);
newColumn
=
new
BoundColumn();
newColumn.DataField
=
"
Freight
"
;
newColumn.HeaderText
=
"
FreightCost
"
;
newColumn.DataFormatString
=
"
{0:c}
"
;
newColumn.ItemStyle.HorizontalAlign
=
HorizontalAlign.Right;
OrdersGrid.Columns.Add(newColumn);
Controls.Add(OrdersGrid);
}
/**/
///
<summary>
///
OrdersLoad
///
handlesOrdersGrid.Load.
///
</summary>
///
public
void
OrdersLoad(
object
sender,EventArgse)
...
{
BindGrid();
}
private
void
BindGrid()
...
{
//
LoadschemaanddataintoaDataSet.
DataSetordersSet
=
new
DataSet();
//
AssumeXMLdatafileisinthewpresourcesfolder.
//
IfFileI/Opermissionsarenotavailable,
//
thefollowingwillthrowasecurityexception.
try
...
{
NorthWindConnection.Open();
string
sqlSelectStr
=
"
select*fromOrders
"
;
NorthWindAdp
=
new
SqlDataAdapter(sqlSelectStr,NorthWindConnection);
NorthWindDataSet
=
new
DataSet();
NorthWindAdp.Fill(NorthWindDataSet,
"
Orders
"
);
NorthWindConnection.Close();
}
catch
(Exceptionex)
...
{
ErrorLabel.Text
=
ex.Message
+
"
<br>
"
+
"
Stepstocorrectthisareincludedin
"
+
"
thedocumentationforthissample.
"
;
ErrorLabel.Visible
=
true
;
return
;
}
finally
...
{
NorthWindConnection
=
null
;
NorthWindAdp
=
null
;
}
//
Noerrorifwemadeitthisfar.
ErrorLabel.Visible
=
false
;
//
UseaDataViewtofilterorders.
string
rowFilter
=
""
;
/**/
///
/if(CustomerId!="")
///
/{
///
/rowFilter="CustomerID='"+CustomerId+"'";
///
/}
///
/if(CustomerId!="")
///
/{
///
/rowFilter="CustomerID='"+"CHOPS"+"'";
///
/}
DataViewordersView
=
new
DataView(NorthWindDataSet.Tables[
"
Orders
"
]);
/**/
///
/ordersView.RowFilter=rowFilter;
OrdersGrid.Enabled
=
true
;
OrdersGrid.DataSource
=
ordersView;
OrdersGrid.DataBind();
}
#endregion
/**/
///
<summary>
///
RenderthisWebParttotheoutputparameterspecified.
///
</summary>
///
<paramname="output">
TheHTMLwritertowriteoutto
</param>
protected
override
void
RenderWebPart(HtmlTextWriteroutput)
...
{
//
output.Write(SPEncode.HtmlEncode(Text));
EnsureChildControls();
if
(ErrorLabel.Visible
==
true
)
...
{
ErrorLabel.RenderControl(output);
return
;
}
//
Ifconnectedthendisplayaheadingandthegrid.
if
(_connectionCount
>
0
)
...
{
output.RenderBeginTag(
"
div
"
);
output.Write(
"
<br>
"
);
output.AddStyleAttribute(HtmlTextWriterStyle.FontWeight,
"
bold
"
);
output.RenderBeginTag(HtmlTextWriterTag.Span);
/**/
///
/output.Write("
<nobr>
OrdersforCustomerID:"
///
/+System.Web.HttpUtility.HtmlEncode(CustomerId)+"
</nobr>
");
output.RenderEndTag();
//
span
output.Write(
"
<br>
"
);
output.Write(
"
<br>
"
);
OrdersGrid.RenderControl(output);
output.RenderEndTag();
//
div
}
if
(_connectionCount
>
0
)
...
{
output.RenderBeginTag(
"
div
"
);
output.Write(
"
<br>
"
);
output.AddStyleAttribute(HtmlTextWriterStyle.FontWeight,
"
bold
"
);
output.AddStyleAttribute(HtmlTextWriterStyle.Color,
"
#000000
"
);
output.RenderBeginTag(HtmlTextWriterTag.Span);
/**/
///
/output.Write("
<nobr>
OrdersforCustomerID:"
///
/+System.Web.HttpUtility.HtmlEncode(CustomerId));
///
/output.Write("
</nobr>
");
output.RenderEndTag();
//
span
BindGrid();
OrdersGrid.RenderControl(output);
output.RenderEndTag();
//
div
}
}
}