ASP.NET錯誤記錄最終編輯 Really·Jen
以下是我在以往的ASP.NET網站建設中總結的一些錯誤記錄,以後可能用不上了,發出來希望能解決網友們的些許問題。
1.密碼最短長度為7,其中必須包含以下非字母數字字元:
註冊時發生
解決方案:
1>. 7位密碼中輸入“~!@#$%^&*()_+”其中之一。
2>. 修改J:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG->machine.config檔案中的
<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
</providers>
</membership>
為:minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0"
3>. 若只針對某一網站,則把<membership>節點中的代碼插入web.config中的<system.web>節點即可。
2. 驗證發生前無法調用 Page.IsValid。應在 CausesValidation=True 且已啟動回傳的控制項的事件處理常式中查詢它,或在調用 Page.Validate 後查詢。
載入頁面時發生
解決方案:若頁面中使用了驗證控制項,則與驗證控制項無關的控制項”Causes Validation”屬性需要設定為”False”.
3.運算子“==”與運算元類型“Int32”和“Object”不相容
載入頁面時發生
解決方案:具體原因不知,只是這樣做後就沒這個問題了
重新設定資料來源或重新編輯整個頁面(重啟系統後),並分階段進行編譯而非一次性編譯.
4. DELETE 語句與 REFERENCE 約束"FK_VoteItem_VoteTitle1"衝突。該衝突發生於資料庫"FullVote",表"dbo.VoteItem", column 'TitleID'。
語句已終止。
單擊GridView1控制項中的Delete時發生
解決方案:在建立資料表關係時要設定”INSERT和UPDATE規範”,”刪除規則”設定為”層疊”或”設定空”(最好為”層疊”,不會像”設定空”那樣佔用資料表空間).
INSERT 和 UPDATE 規範類別
展開此項可顯示關係的“刪除規則”和“更新規則”的資訊。
刪除規則
指定當使用者嘗試刪除某一行而該行包含外鍵關係涉及的資料時將發生的情況。
No Action An error message tells the user that the deletion is not allowed and the DELETE is rolled back.
Cascade Deletes all rows containing data involved in the foreign key relationship.
Set Null Sets the value to null if all foreign key columns for the table can accept null values.僅適用於 SQL Server 2005。
設定預設值 如果表的所有外鍵列均已定義預設值,則將值設定成為該列定義的預設值。僅適用於 SQL Server 2005。
更新規則
指定當使用者嘗試更新某一行而該行包含外鍵關係涉及的資料時將發生的情況。
No Action An error message tells the user that the deletion is not allowed and the DELETE is rolled back.
Cascade Deletes all rows containing data involved in the foreign key relationship.
Set Null Sets the value to null if all foreign key columns for the table can accept null values.僅適用於 SQL Server 2005。
設定預設值 如果表的所有外鍵列均已定義預設值,則將值設定成為該列定義的預設值。僅適用於 SQL Server 2005。
5.未將對象引用設定到對象的執行個體。
單擊重新導向按鈕時發生
解決方案: 把Response.Redirect("~/ViewVote.aspx")改為 Response.Redirect("~/ViewVote.aspx?titleid=" + DropDownList1.SelectedValue.ToString())後即解決.[當前頁面中有DropDownList1控制項]
6.運算子“==”與運算元類型“Int32?”和“Object”不相容
載入頁面時發生
解決方案:其他問題解決後即不再有此問題
7.單擊按鈕不能發生任何事件
解決方案:雙擊按鈕後的事件名與按鈕屬性中的Click事件名不一致,應改為一致.
8. 無法建立關係“FK_Student_ExamGroup”。
ALTER TABLE 語句與 FOREIGN KEY 約束"FK_Student_ExamGroup"衝突。該衝突發生於資料庫"GPMS",表"dbo.ExamGroup", column 'ExamGroupID'。
建立外鍵關係時發生(在一個表中更換了欄位)
解決方案:在給兩個表建立關係時,若一個表中新添了欄位或更換了欄位,而這個表中已有資料存在,則會發生此問題.此時需要給另一個表也加入相應資料或者把已有資料刪除.
9. SQL2000附加資料庫時提示"錯誤602;未能在sysindexes中找到資料庫ID7中對象ID1的索引ID1對應的行
假如是採用sqlServer2005的話你用Sql2000附加Sql2005的資料庫就會出現這種錯誤(解決方案:改用SqlServer2005附加一下,假如還想用Sql2000格式那就用匯出sql語句等方式進行轉換)
轉csdnsql專家鄒建的解決辦法
直接restore或附加應該是不行的,用指令碼 導資料肯定沒有問題。
2005轉到2000的步驟
1>.產生for2000版本的資料庫指令碼
2005的mangerstudio
--開啟"對象資源治理器"(沒有的話按F8),串連到你的執行個體
--右鍵要轉到2000的庫
--任務
--產生指令碼
--在"指令碼嚮導"的"選擇資料庫"中,確定選擇的是要轉到2000的庫
--勾選"為所選資料庫中的所有對象編寫指令碼"
--在接下來的"選擇指令碼選項"中,找到"為伺服器版本編寫指令碼"項,選擇"SQLServer2000"
--其他選項根據需要設定
--最後把指令碼儲存到一個.sql指令檔
2>.在2000中建立目標資料庫
在查詢分析器(或2005的mangerstudio在開啟指令檔),串連到SQLServer2000,執行上面產生的指令碼.以建立一個新的資料庫
3>.將資料從2005導到2000
2005的mangerstudio
--開啟"對象資源治理器"(沒有的話按F8),串連到你的執行個體
--右鍵要轉到2000的庫
--任務
--匯出資料
--在"SQLServer匯入和匯出嚮導"的"選擇資料來源"步驟中,確定選擇的是要匯出的資料庫
--在"選擇目標"步驟中,串連到2000,並選擇步驟2建立的庫
--在"選擇源表和源視圖"中,選擇所有的表
--最後完成
10.使用者 'NT AUTHORITY\NETWORK SERVICE' 登入失敗
IIS均按要求進行了配置,但確無法在localhost中瀏覽(相應的資料庫沒有設定使用者名稱和密碼)
解決方案:
在Windows XP當中,ASP.NET的運行帳號是ASPNET,而在Windows server 2003當中,運行帳號則改為了Network Service,直接把這個使用者加到sql server的登陸帳號裡面就好了,這樣很多例子就不用去改連接字串了!
第一步:把'NT AUTHORITY\NETWORK SERVICE' 添加到Administrator組中
我的電腦-->右鍵-->管理-->本機使用者和組選擇“組”-->
雙擊Administrators-->單擊“添加”-->單擊“進階”-->
單擊“立即尋找”-->
在下面的列表中選擇Network Service使用者-->兩次單擊“確定”-->加入。
第二步 在企業管理器中加入NetWord Service使用者
開啟Sql Server企業管理器-->
選擇資料庫執行個體-->
開啟“安全性”節點-->選擇“登入”-->
在右邊的列表中單擊右鍵-->選擇“建立登入”-->
在“常規”選項卡中單擊“名稱”旁邊的按鈕“...”-->
選擇“Administrators”組-->單擊下面的“成員”按鈕-->
選擇“Network Service”-->單擊“添加”按鈕-->
單擊“確定”,返回“建立登入”對話方塊-->
保證身分識別驗證類型為“windows驗證”和“允許訪問”-->
雙擊該使用者 在伺服器角色 中 勾選 sysadmin
單擊“確定”-->
關閉“企業管理器”
第三步重新運行asp.net程式,資料庫連接字串選擇windows驗證即可。
11. 在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的節是錯誤的。如果在 IIS 中沒有將虛擬目錄配置為應用程式,則可能導致此錯誤。
原因:Machine.config裡的allowDefinition="MachineToApplication"。
解決1:把allowDefinition設為:Everywhere。考慮到最好不要改動Machine.config檔案,否則可能會引起其他錯誤。
解決2:<authentication mode="***"> 是應用層級的,不能在子目錄層級的web.config內
設定,只能在根目錄層級的web.config內。所以,應刪除子目錄中的<authentication>節。
12. 在啟用了 Delete、Insert 或 Update 操作時,LinqDataSource“LinqDataSource1”不支援 Select 屬性。
預設情況下,LinqDataSource 控制項從資料對象中檢索所有屬性的值。如果您要使用可用屬性的子集,可使用 Select 屬性來指定要返回的屬性。Select 操作應用於 Where、Order By 和 Group By 操作之後。因此,如果在 Select 子句中建立一個別名,則該別名不能用於其他子句。
可以指定是否通過使用 EnableDelete、EnableInsert 和 EnableUpdate 屬性來啟用資料修改。用於從 LinqDataSource 控制項修改資料的使用者介面通常利用資料繫結控制項(如 DetailsView 控制項)來提供。除了將 EnableDelete、EnableInsert 或 EnableUpdate 設定為 true,還需要滿足以下條件來啟用自動資料修改:
不能為 Select 屬性賦值。
不能為 GroupBy 屬性賦值。
分配給 ContextTypeName 屬性的類必須派生自 DataContext。
分配給 TableName 屬性的屬性必須派生自 Table<(Of <(TEntity>)>)。
您可以使用兩種方法來限制資料繫結控制項中顯示的屬性。可以將 Select 屬性設定為屬性子集,也可以通過添加 DataControlField 控制項為資料繫結控制項定義欄位。但是,如果設定 Select 屬性,則表示無法啟用自動更新、插入和刪除操作。如果要在使用可用屬性子集時啟用自動資料修改,請勿設定 Select 屬性。相反,請檢索資料對象中的所有屬性並通過使用資料繫結控制項來管理要顯示的屬性。當使用 DetailsView 控制項或 GridView 控制項時,還必須將 AutoGenerateRows 或 AutoGenerateColumns 屬性設定為 false。這樣會阻止資料繫結控制項自動包含用於編輯和刪除資料的按鈕。任何未顯示在資料繫結控制項中的值都將儲存在檢視狀態中。當執行資料更新時,它們會按原樣傳遞到資料來源。
如果在運行時必須計算供排序、篩選或分組的值,則可以將參數添加到 WhereParameters、GroupByParameters、OrderGroupsByParameters 或 OrderByParameters 集合。
如果要指定如何處理Null 字元串值或要提供預設值,則可以將參數添加到 InsertParameters、UpdateParameters、DeleteParameters 或 SelectParameters 集合。
如果要在執行資料操作之前對值進行檢查或修改,則可以處理 Deleting、Inserting、Selecting 或 Updating 事件。還可以處理這些事件,以便取消資料操作或檢查在基於使用者輸入來設定資料類中的屬性時發生的驗證錯誤。
若要在完成資料操作之後對值進行檢查,則請處理 Deleted、Inserted、Selected 或 Updated 事件。
通過為 Selecting 事件建立事件處理常式,可以使用 LinqDataSource 控制項從預存程序檢索資料。在事件處理常式中,調用資料內容類中表示預存程序的方法,並將結果設定為 LinqDataSourceSelectEventArgs 對象的 Result 屬性。如果要對資料啟用自動更新、插入和刪除操作,從該方法返回的類型必須與 TableName 屬性中指定的類型相匹配。有關建立資料內容方法的更多資訊,請參見如何:建立映射到預存程序和函數的 DataContext 方法(O/R 設計工具)。
13. 找不到與 ViewState 中儲存的原始值中的給定鍵相匹配的行。請確保“keys”字典包含與上一個 Select 操作返回的行對應的唯一索引值。
ListView更新資料時出錯
解決方案:在ListView控制項中添加屬性:DataKeyNames=”主鍵列名(一個或多個)”.
網上查到:
使用ASPxGridView控制項時,點Edit編輯一行,出來Update和cancel,編輯完資料後點擊Update,出錯:在正在編輯的那行下方會出來一汗背景淡紅色字型是紅色的字“不支援所指定的方法”,英文是Specified method is not supported.
解決辦法是用資料來源控制項載入資料,指定ASPxGridView控制項的DataSourceID等於該資料來源控制項的ID,並指定一個KeyFieldName。我是看了官方的DEMO才知道這樣做的,我原來是用我們項目自己的資料訪問層提供的介面載入資料在.ASPX.CS檔案中綁定給它的,這樣做不無更新資料的原因我解釋為:ASPxGridView控制項本身只做顯示資料的作用,但網頁載入完畢後就不存在資料來源,因此不法Update資料,需要用資料來源控制項儲存資料以便更新,並且更新資料是讓資料來源控制項去做的。這樣解釋不合理之處還望賜教。
資料來源控制項有很多,我這裡用的是ObjectDataSource,因為我們項目本身已經有資料訪問層存在了,不需要用其他的資料來源控制項訪問資料庫。在這個WEB項目下建立一個檔案夾App_Code,在App_Code下 建立個類abc,定義命名空間為DEMO,using資料訪問層的命名空間,添加一個方法LoadData,返回DataTable類型的值,方法參數隨 意,在這個方法中載入資料返回;再添加一個方法UpdateData,參數至少1個以上,就是需要傳給預存程序的一些ID列和要修改的值(這些參數都要在ObjectDataSource的UpdateParameters屬性中添加,它們的名字與這些參數名相同,同時它們還要在ASPxGridView控制項的Columns中存在,如果是不想顯示的列可以設定Visible="False"),那麼對於我們肯定是要修改一些值的要不然就不用Update了,無需傳回值,方法中調用資料訪問層的方法修改資料。
然後設定ObjectDataSource控制項的TypeName="DEMO.abc",SelectMethod="LoadData",UpdateMethod="UpdateData",同時還要添加SelectParameters的參數名和值,參數名要跟LoadData函數中的參數名相同,值有各種選擇,可以是控制項的屬性,也可以是Session變數,根據需要設定,如。好了,這回沒有紅色的字出來了,而且資料修改成功。
14.ListView資料更新沒有成功
上述問題解決後資料更新依然沒有成功
解決方案:
問題出在我修改了<EditItemTemplate>標籤中的內容,沒有注意到<EditItemTemplate>與<ItemTemplate>的不同. <%# %>中一個為Eval(),一個為Bind().
需要修改的資料設定為Bind,不需要修改的資料依然是Eval.
參考MSDN:資料繫結運算式文法
所有資料繫結運算式都必須包含在 <%# 和 %> 字元之間。
ASP.NET 支援分層資料繫結模型,該模型建立伺服器控制項屬性和資料來源之間的綁定。幾乎任何伺服器控制項屬性都可以綁定到任何公用欄位或屬性,這些公用欄位或屬性位於包含頁或伺服器控制項的直接命名容器上。
資料繫結運算式使用 Eval 和 Bind 方法將資料繫結到控制項,並將更改提交回資料庫。Eval 方法是靜態(唯讀)方法,該方法採用資料欄位的值作為參數並將其作為字串返回。Bind 方法支援讀/寫功能,可以檢索資料繫結控制項的值並將任何更改提交回資料庫。
可以使用 XPath 和 XPathSelect 方法以及 XPathBinder 類從 XmlDataSource 控制項綁定到 XML 資料。有關更多資訊,請參見 XmlDataSource Web 伺服器控制項。
15.IE中更新資料後再點擊導覽列時還是原來資料(資料庫中已更新)
解決方案:
不從緩衝中讀取資料的做法(引用別人的)
不從緩衝裡讀取資料,同樣在JSP裡也能實現,請看下面:
方法一:
1>,使用java提供的方法,在jsp或者servlet中都可以
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%>
2>,使用HTML標記,如下面:
<HEAD>
<METAHTTP-EQUIV="Pragma"CONTENT="no-cache">
<METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">
<METAHTTP-EQUIV="Expires"CONTENT="0">
</HEAD>
附加說明:
HTTP頭資訊“Expires”和“Cache-Control”為應用程式伺服器提供了一個控制瀏覽器和Proxy 伺服器上緩衝的機制。HTTP頭信 息Expires告訴Proxy 伺服器它的快取頁面面何時將到期。HTTP1.1規範中新定義的頭資訊Cache-Control可以通知瀏覽器不緩衝任何頁面。 當點擊後退按鈕時,瀏覽器重新訪問伺服器已擷取頁面。如下是使用Cache-Control的基本方法:
1) no-cache:強制緩衝從伺服器上擷取新的頁面
2) no-store: 在任何環境下緩衝不儲存任何頁面
HTTP1.0規範中的Pragma:no-cache等同於HTTP1.1規範中的Cache-Control:no-cache,同樣可以包含在頭資訊中。
通過使用HTTP頭資訊的cache控制,第二個樣本應用logoutSampleJSP2解決了logoutSampleJSP1的問題。 logoutSampleJSP2與logoutSampleJSP1不同表現在如下程式碼片段中,這一程式碼片段加入進所有受保護的頁面中:
//...
response.setHeader("Cache-Control","no-cache"); //Forces caches to obtain a new copy of the page from the origin server
response.setHeader("Cache-Control","no-store"); //Directs caches not to store the page under any circumstance
response.setDateHeader("Expires", 0); //Causes the proxy cache to see the page as "stale"
response.setHeader("Pragma","no-cache"); //HTTP 1.0 backward compatibility
String userName = (String) session.getAttribute("User");
if (null == userName) {
request.setAttribute("Error", "Session has ended. Please login.");
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request, response);
}
//...
方法二:
在IE中也可通過設定實現:把/工具/INTERNET選項/常規/設定/的檢察所存頁面的較新版本,設為每次訪問該頁時都檢查.
16.ASP.NET控制項textbox的樣式overflow:visible在IE6和IE7不相容
現在,最令網頁設計者頭痛的問題就是網頁在各個瀏覽器中的相容性。而相容性差最長見的,也是最令人恐懼的便是“頁面配置混亂”。常常一個頁面在 IE6下顯示的非常完美,而到了IE7(或者FireFox)中,則慘的“不堪入目”。到底是什麼讓這些頁面那麼的“水土不服”呢?
其實,這些都是IE6釀下的惡果,IE6對web標準的支援過於不足,甚至理解的有偏差,才導致了這些頁面的“脆弱”。而IE7則修正了很多的那種 “IE6對css解釋和渲染”的bug。這種bug有很多。今天,這裡只講其中一個,但是確是最重要的一個,很多的“十分”混亂的頁面都是它造成的。可以 不客氣地說,它簡直就像“頁面配置混亂黑幫”的幕後黑手,是引起頁面配置混亂的禍首之一,而且是最大的一個。 它就是潛伏在網頁背後的“‘overflow:visible’IE6渲染bug”。
原因——IE6對“overflow:visible”的誤解
Visible: "This value indicates that content is not clipped, i.e.,it may be rendered outside the block box(註:後面這句可能是後續版本補充上來的)".
注意,w3c只是說,超出容器的內部不會被剪下。但是它並沒有說,超出來的內容可以“撐開”容器。所以下面這個例子中IE7的解釋和渲染是正確的,而 IE6則是錯誤的(因為它錯誤的認為,只有讓容器內的內容“撐開”容器,才能讓容器內的內容在超出時不被剪下),IE7和FireFox是一樣的。
解決方案
大家知道IE有兩種渲染模式:Quirks Mode和Strict Mode。Quirks Mode基本上是非標準的,包括盒模型在內,它的渲染方式與W3C的標準有些出入。而Strick Mode基本上是標準的(反正都不是絕對標準也不是絕對不標準……)。IE6及以前版本會根據寫在XHTML文檔第一行(也只能是第一行)的 DocType聲明來選擇渲染模式。如果發現了一個它能識別的DocType,比如XHTML Transitional或者XHTML Strict等等,它就使用Strict Mode來渲染。其他所有情況下都使用Quirks Mode。
有些開發人員為了顯式地聲明他們的XHTML文檔是一個XML,會在文檔的第一行(問題就在這裡,它也必須在第一行)加上XML的序言(prolog)。比如:
<?xml version="1.0" encoding="gb2312"?>
雖然初衷是為了讓文檔更“標準”,但由於IE不認這行字,結果還是按Quirks Mode來渲染。
IE7 解決這個問題,它會跳過prolog來看檢查DocType。所以可能會出現IE6及以下版本用Quirks Mode渲染而IE7 用Strict Mode渲染的情況。
現在讓IE7渲染textbox的模式是Quirks Mode,這樣textbox的overflow:visible屬性就可以像IE6效果一樣了,所以只要把XHTML文檔第一行的DocType聲明刪除就可以了。
這樣問題就解決了。。。
注意:雖然在IE7和IE6中顯示一樣的,但是在FF中還是不一樣,所以這種方法只能解決IE7中的問題,FF中的是無能為力的。
另法:TextBoxID.Attributes.Add("style", "overflow:visible");
我在GPMS中的解決方案:
把XHTML文檔第一行的DocType聲明刪除
html,body{ height:100%; }
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" CssClass="TextBox"/>
.TextBox{ overflow:visible; width:100%; min-height:500px !important; background-color:#FFEFD5; padding:20px; padding-right:0 !important;_padding-right:20px; border:0 ; margin:0; }
17.w3c標準自適應高度height100%不起作用的問題
在以前的網頁中,table用height:100%是可以整屏的,但在網頁頭部增加:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
後就和沒有用height:100%一樣了,後來發現要給html,body都增加height:100%的屬性,這是高度自適應問題的關鍵所在。
------------------------------------------------ html,body{ margin:0px; height:100%; } ------------------------------------------------ 一個對象高度是否可以使用百分比顯示,取決於對象的父級對象,Table在body之中,因此它的父級是body,而瀏覽器預設狀態下,是沒 有給body一個高度屬性的,因此當我們直接設定#left為height:100%;時,不會產生任何效果,而當我們給body設定了100%之後,它 的子級對象Table的height:100%;便發生作用了,這便是瀏覽器解析規則引發的高度自適應問題。而代碼中除了給body應用之外,還給 HTML對象也應用相同的樣式設計,這樣做的好處是使IE與firefox瀏覽器都能夠實現高度自適應。另外,Firefox中的HTML標籤不是 100%高度,因此給兩個標籤都定義為height:100%;以保證兩個瀏覽器下均能夠正常顯示。
18.使listview中選擇某一資料時只顯示該資料的過程中出錯:若在第一頁則正確顯示,若在第一頁以後則不能正確顯示(顯示內容為與第一頁對應位置的資料)
解決方案:
ListView1_SelectedIndexChanging事件中先綁定空資料
BindNull();
再綁定選擇資料
BindSelected(NewsID);
19. FreeTextBox文本倥件輸入漢字的時候可以自動換行,但輸入數字和英文就不能換行
沒有解決,不過官方原版英文的肯定輸入英文能自動換行
20. 如何讓資料自動換行?CSS幫你解決問題 [絕!!!]
在表格的 style 屬性哪裡 加上
"word-break:break-all;word-wrap:break-word"
這樣就可以保持頁面不變...就算是多長的一串文字也沒有問題了...
(解決了我的一個難題:TextBox中輸入的內容若沒用斷行符號來換行時若在高度可自適應的TEXTBOX中顯示出來則不會自動換行) (但在FireFox中不能完美解釋) [其他的不能自動換行的問題也可用此方法解決?]
21.FireFox中點擊按鈕後頁面自動加長
解決方案:去除頁面主要部分的<div>中屬性”Height:100%”.
22.序列不包含任何元素
在資料表中查詢某欄位的值等於某個參數值,而這個欄位卻還未賦值時發生.
解決方案:先判斷指定的欄位是否包含傳遞的參數再判斷是否為空白
var stuidInclude = from o in db.Result
select o.StuID;
if (stuidInclude.Contains(StuID))
{
var Term = from p in db.Result where p.StuID == StuID && p.TermID == TermID select p;
if (Term.Count() > 0)
return Term.First().TermResult;
else
return null;
}
else
return null;
也可直接判斷是否為空白(不用管欄位是否賦值)[此方法較好]
var Term = from p in db.Result where p.StuID == StuID && p.TermID == TermID select p;
if (Term.Count() > 0)
return Term.First().TermResult;
else
return null;
23.索引超出範圍。必須為非負值並小於集合大小。
參數名: Index
行 85: TeaID[i] = ListView1.DataKeys[i].Value.ToString();
在用ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)迴圈擷取主鍵時發生
解決方案:用ListView1_DataBound(object sender, EventArgs e)事件代替.
24.不能添加其鍵已在使用中的實體。
不能添加其鍵已在使用中的實體 (a主表,b外鍵表)?
解決方案:
A.給外鍵ID賦值,注意:不能a.id=11,再b.aId=a.Id,而是:int i=11,a.Id=i,b.aId=i;
B主表自動成長列
修改a.Id時:
就先找到就先找到新a.id的對象etnewa,再把b的對應etnewa.b.Add(etb),再update(etnewa)
文章出處:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008821/136763.html
25.ListView中控制項失效
在瀏覽器中瀏覽時,ListView中分頁控制項和其他連結均失效
出現該問題的原因:在此頁中使用了驗證控制項,而只對部分控制項使用了CausesValidation="True"; 但在listview中卻沒有CausesValidation屬性,因此導致控制項失效.
26. 從用戶端(...)中檢測到有潛在危險的 Request.Form 值。
說明: 請求驗證過程檢測到有潛在危險的用戶端輸入值,對請求的處理已經中止。該值可能指示危及應用程式安全的嘗試,如跨網站的指令碼攻擊。通過在 Page 指令或 配置節中設定 validateRequest=false 可以禁用請求驗證。但是,在這種情況下,強烈建議應用程式顯式檢查所有輸入。
解決方案:
在頁首<%@ Page Language="C#" … %>中加入validateRequest=false即可.
27. 將截斷字元據。\r\n語句已終止。
原因:超了資料庫欄位長度所致
解決:調整資料庫欄位長度
28. 此資料庫沒有有效所有者,因此無法安裝資料庫圖表支援對象。若要繼續,請首先使用“資料庫屬性”對話方塊的“檔案”頁或ALTER AUTHORIZATION語句將資料庫擁有者設定為有效登入名稱,然後再添加資料庫圖表支援對象。
原因一:從SQL SERVER 2000中備份的資料庫還原到SQL SERVER 2005上,打算建立一個資料庫圖表,可是在Microsoft SQL Server Management Studio中一點資料庫圖表的檔案夾,就出現一個“此資料庫沒有有效所有者,因此無法安裝資料庫圖表支援對象。若要繼續,請首先試用”資料庫屬性”對話方塊的”檔案”頁或ALTER AUTHORIZATION語句將資料庫擁有者設定為有效登入名稱,然後再添加資料庫圖表支援對象”的提示按照他說的指定所有者,可惜還是不對,查了一下,應該執行如下語句:
USE [master]
GO
EXEC dbo.sp_dbcmptlevel @dbname=N’資料庫名’, @new_cmptlevel=90
GO
因為2000備份的資料庫還原到2005以後,相容層級是80,更新成90就OK了
原因二:
當把從其它機器備份出來的資料庫,還原到自己的機器上後,在SSMS中點擊這個資料庫的資料庫圖表時,出現了以下提示:
此資料庫沒有有效所有者,因此無法安裝資料庫圖表支援對象。若要繼續,請首先使用“資料庫屬性”對話方塊的“檔案”頁或ALTER AUTHORIZATION語句將資料庫擁有者設定為有效登入名稱,然後再添加資料庫圖表支援對象。
資料庫中確定是有資料庫圖表的。提示給出了兩種方法,第一種試了幾次都不好用,第二種方法倒是一次成功,具體在SSMS中運行以下命令:
ALTER AUTHORIZATION ON database::mydbname TO sa
把mydbname修改為實際的資料庫名稱,就可以把所有者設定為sa了。
29.update語句的語法錯誤
Update語句跟蹤檢查了一遍又一遍,也沒有發現有什麼異常。更奇怪的是把那個更新語句拿到Access中去直接運行,一點錯誤沒有
解決方案:
把欄位名用“[]”,括起來.