簡體   English   中英

奇怪的行為:ASP.NET到Sql Server

[英]Strange behavior: ASP.NET to Sql Server

好。 所以在我問問題之前,這里是背景。 我剛剛通過了ASP.NET的開發階段,並在本地計算機上創建了功能齊全的Web應用程序。 因此,我將文件傳輸到要在其上運行的Windows服務器上創建的IIS Webfolder,以查看其運行是否正常。 可以!

所以問題是這樣的。 當我輸入信息時,我單擊Button1並得到一個回發,如果您看一下我的代碼,這是正常的。 我去使用Sql Server Management檢查數據庫,然后我看到了.....什么都沒有!

下面是一些細節,可以幫助您連同下面的代碼一起解決這個問題。

細節:

  • Windows Server 2003
  • SQL Server 2005
  • .NET Framework 2.0
  • IIS 6

使用正確的textBox名稱和所有內容,標記符合預期

C#代碼:

protected void Button1_Click(object sender, EventArgs e)   {
   SqlConnection connection = new SqlConnection(@"Data Source=myServerName;Initial Catalog=myDatabaseName;Integrated Security=True");  

   SqlCommand cmd = new SqlCommand("insert into [PATIENT]([MRN], [PFNAME], [DOB]) "
                    + " Values(@MRN, @PFNAME, @DOB)", connection);

   cmd.Parameters.AddWithValue("@MRN", int.Parse(MRNTextBox.Text));  
   cmd.Parameters.AddWithValue("@PFNAME", NameTextBox.Text);  
   cmd.Parameters.AddWithValue("@DOB", DOBTextBox.Text);

   connection.Open();  
   cmd.ExecuteNonQuery();  
   cmd.Connection.Close();
}

那就是代碼。 我什至無法猜測問題可能出在哪里,因為我沒有收到任何錯誤消息。 如果您需要更多信息,請告訴我。 我會很樂意提供。

PS我正在通過IIS而不是ASP.NET開發服務器來運行網站(如果我還沒有提到的話。因此,如果它在VS的“在瀏覽器中查看”中運行,那么我很高興知道”)

編輯

我要感謝所有人的幫助。 我遵循了您的大多數建議,並希望在找出新問題(出現登錄錯誤異常,是的!)之后,我將能夠在實踐中使用您的評論。 你們都會以為我是個白痴(我現在好像很傻),但是我看不到這些變化的原因是因為沒有構建C#代碼。 我知道有人提到編譯,但是我認為它是編譯的,因為任何時候我對標記進行更改時,它都會立即顯示在Web上。 我已經習慣了“在瀏覽器中查看”,以至於我忘記了Visual Studio自動編譯代碼(我認為)

我要做的第一件事是在代碼中添加一些檢測。 最簡單的方法是添加一些跟蹤。 這將確保事件正確連接並正確觸發事件。 如果看不到跟蹤中觸發了按鈕單擊,則說明您存在UI問題,可以集中精力解決它。 最常見的是未正確設置@ Page指令,但是還有其他潛在原因。

進行下一步疑難解答的是,如果可能的話,對要訪問的服務器進行概要分析。 希望您不會直接部署到生產環境,並且擁有一個可以在其中使用的過渡環境。

我的最后一步是從UI層重構出實際的數據代碼,並創建一個可測試的“存儲庫”(無論您是否使用存儲庫模式-引用的原因)。 然后,您可以將代碼包含在測試中,並確保代碼可以正常工作。 您仍然需要進行跟蹤以確保正在調用該庫並且正確地連接了事件,但是分開關注將使您能夠更好地處理數據訪問代碼的問題。

好吧,不是最后。 您需要從代碼中刪除魔術字符串,然后將其移動到它們所屬的配置中。 硬編碼==壞棗。

希望這可以幫助!

如果您確定事件正在觸發,那么最可能的原因是您對Integrated Security的使用。 請記住,ASP.NET進程不等同於您的個人登錄。 僅當您通過已在數據庫中明確指定了帳戶的帳戶或組(例如,管理員)登錄並訪問數據庫時,集成安全性才起作用。 唯一的疑問是,為什么在嘗試連接時沒有出現錯誤。

不要試圖讓IIS_IUSRS帳戶訪問數據庫-這是麻煩的提示。 而是使用在您的登錄字符串中帶有適當且安全密碼的SQL Server帳戶。 這樣,您不必擔心IIS_IUSRS相對於數據庫的狀態。

作為一個側面說明,你會很快成長非常累的明確打開連接,設置命令,添加參數,等我強烈建議您先采取商業ORM或更好,但實現一個輕量級的數據訪問層,它可以自動很多艱苦的工作。

最簡單的解釋是,您只是打錯了數據庫。 否則,您應該會看到一些錯誤。 您不是在默默地捕捉例外嗎?

您的代碼似乎很好。 您在問題中提到沒有任何異常,並且代碼也無法正常工作。 可能是您可以嘗試這樣做,以便您的代碼中至少有任何可能會悄然引起問題的異常,您至少可以捕獲。

將Global.asax文件添加到您的Web項目,然后向其中添加Application_Error事件。 以下是相同的簽名

protected void Application_Error(object sender, EventArgs e)
{
}

這是一個事件,它將捕獲您的Web項目中的任何異常,無論該異常在您的項目中的何處發生。 一旦達到斷點,請檢查sender對象的AllErrors集合。 以下代碼將為您提供幫助

(sender as HttpApplication).Context.AllErrors[0]

如果您的代碼中存在某些錯誤,則無法通過此事件。 肯定會在這里被抓住。

祝一切順利

坦率地說,請使用LLBLGen Pro這樣的ORM

在數據庫訪問方面,您不需要重新發明輪子。 這將有助於您的代碼可維護,並減少由於編寫自己的數據庫訪問而導致引入錯誤的機會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM