我有一個很長的,具體的問題。asp.net sql update報告它正在工作,但沒有真正的結果
我在創建asp.net(C#) Web應用程序。
我已經定製了一個DATABASE.cs類,女巫用於所有與數據庫的通信,我有在真實服務器上(不是我正在開發web應用的pc),並且它正在工作很好 - 完全沒有錯誤。
我programmaticaly在formReports.aspx創建一個表,並在每一行中,還有來自數據庫的一些信息,在(asp.net的)文本框-ES顯示,帶有按鈕保存和刪除 。在此調用中,我對感興趣,爲什麼保存按鈕不起作用。
幾件事情,可能需要了解的:
-The formReports.aspx顯示在其他.aspx頁面中以的iFrame。
- 保存按鈕的Click功能是這樣添加的:btn.Click += new EventHandler(Update);
在我設置btn.CommandArgument
之前,我需要保存一些變量,用「/」分開。
- 更新功能工作正常,服用按鈕CommandArgument
的,與這些變量分裂他們到變量,並呼籲DATABASE.cs功能更新。
- 取自CommandArgument
的變量沒問題,就像我需要它們一樣,所以沒有錯誤。
- DATABASE.cs不是靜態類。
-In DATABASE.cs,我正在使用SqlConnection
和SqlCommand
。
- 我在代碼運行時通過逐步檢查檢查了所有內容。
現在,這裏是從DATABASE.Update代碼:
public string Update(ReportContent rcOld, string newAccountCodeID, string newAmount)
{
string queryFrom = "FROM [FinReports].[dbo].[ReportContent] ";
string queryWhere =
" WHERE ReportID = '" + rcOld.ReportID +
"' AND AccountCodeID = '" + rcOld.AccountCodeID +
"' AND Amount = '" + rcOld.Amount.ToString().Replace(',', '.') + "'";
//check number of rows
int rowCount;
string query = "SELECT COUNT(*) " + queryFrom + queryWhere;
try { rowCount = int.Parse(Single(query)); }
catch { throw new NotSupportedException(command.CommandText + ""); }
//throw new NotSupportedException(query + "");
//return if eny errors are found
if (rowCount < 1) return "Ne postoji u bazi podataka";
if (rowCount > 1) return "Postoji vise od 1 reda sa istim celijama";
//update row
query = "UPDATE [FinReports].[dbo].[ReportContent] " +
"SET AccountCodeID = '" + newAccountCodeID + "', Amount = " + newAmount.Replace(',', '.') +
queryWhere;
//throw new NotSupportedException(query + "");
//try {
if (NonQuery(query) != 1)
return "Greska";
//} catch { throw new NotSupportedException(query + ""); }
return "";
//}catch{return "Fatalna greska"; }
}
的ReportContent.cs只是用來包含ReportID,AccountCodeID和金額的一類。當我填充表格時,在創建EACH行時,在CommandArgument
中,我放入了這個類的信息。
btn.CommandArgument
例如:U/1/220/43267,14其中:
Ü - 表示 「更新」
1 - 代表錶行號(從DATABASE在預製取出列表還列表索引.cs類。
220 - 代表從ReportContent(東西ROM真正的數據庫)
43267,14 AccountCodeID - 代表量ReportContent(東西ROM真正的數據庫)
正如你可以probbably告訴,與throw new NotSupportedException()
我將毫無遺漏確切SQL查詢,在真實的服務器上試過了,它工作正常 - 沒有錯誤,並且行已更新。
功能單()和NonQuery()只需打開連接,執行的ExecuteScalar(),這是的ExecuteNonQuery(),並隨後關閉連接 - 沒有錯誤有eather,他們返回(單())字符串來自單個左上單元格,即受影響行的(NonQuery())節點。
問題:我點擊保存按鈕,功能更新從formReport.aspx叫,巫婆然後調用DATABASE.Update函數,返回空字符串( 「」) ,因爲實際數據庫中的行更新爲,但是當我檢查真實數據庫時,行是根本不受影響。
一切運行平穩。我甚至補充說,如果DATABASE.Update返回「」 - 如果它不是「」(當它點擊它時它變成黃色),它會變成紅色。
爲什麼從我的(客戶端)那裏得到更新成功完成的信息,但是當我到達真實服務器時,刷新結果,我所瞄準的那一行不受影響?
在SQL Server上運行探查器跟蹤,並查看當您執行更新時,.NET應用程序發送了哪些命令(如果有)。 –
你可以顯示'NonQuery()'的代碼嗎? – user1666620
您應該重寫您的類DATABASE.cs並開始使用** [參數化查詢](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/)**。字符串連接容易受到惡意Sql注入的影響,但也容易受到格式錯誤的sql,類型轉換,數據截斷以及無法使用緩存的查詢計劃的影響。這種改變也會使調試更容易。如前所述,您可能需要運行跟蹤來檢查服務器上正在執行的操作。 – GarethD