2016-03-25 110 views
-2

我試圖插入數據(用戶輸入)到SQL Server數據庫。一切看起來都很好,但實際上並沒有將任何數據插入到數據庫中。隱藏文件(default.aspx.cs)的代碼如下所示:從asp.net插入數據到SQL Server數據庫

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Configuration; 
using System.Data; 
using System.Data.SqlClient; 

public partial class _Default : System.Web.UI.Page 
{ 
    SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["mumsDiaryConnectionString"].ConnectionString); 

    protected void reg_submit_Click(object sender, EventArgs e) 
    { 
     if (Page.IsValid) 
     { 
      // storing user input data into variable 
      var first = reg_first.Text; 
      var last = reg_last.Text; 
      var email = reg_email.Text; 
      var pass = reg_pass.Text.GetHashCode().ToString(); 
      var sub = reg_sub.Text; 
      var state = reg_state.Text; 
      var post = reg_post.Text; 
      var country = "Australia"; 

      try 
      { 
       connection.Open(); 
       SqlCommand cmd = new SqlCommand("INSERT INTO user(first, last, email, password, suburb, postcode, state, country) VALUES('"+first+"','"+last+"','"+email+"','"+pass+"','"+sub+"','"+post+"','"+state+"','"+country+"')", connection); 
       cmd.ExecuteNonQuery(); 
      } 
      catch(Exception err) 
      { 
       Label10.Text = "something gone wrong"; 
       Label10.Text += err.Message;   
      } 
      finally 
      { 
       connection.Close(); 
       // Response.Redirect("~/Pages/Home_page.aspx"); 
      } 
     } 
} 
} 

,這是我的web.config文件看起來像:

<?xml version="1.0"?> 
<!--For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433--> 

<configuration> 
<connectionStrings> 
    <add name="mumsDiaryConnectionString" connectionString="Data Source=MDASHIFURRA73C7\SQLEXPRESS;Initial Catalog=mumsDiary;Integrated Security=True" 
providerName="System.Data.SqlClient" /> 
</connectionStrings> 
<system.web> 
    <compilation debug="true" targetFramework="4.6" /> 
    <httpRuntime targetFramework="4.6" /> 
</system.web> 

<appSettings> 
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> 
</appSettings> 
</configuration> 

任何人都可以找出這裏有什麼問題嗎?乾杯。

+3

和你得到的錯誤是? –

+1

您是否使用過調試器來遍歷代碼?你得到任何錯誤 – MethodMan

+6

這段代碼是壞的。請不要這樣寫。它很容易被SQL注入。用參數化查詢重寫。 – user1751825

回答

1

可悲的是,我們沒有足夠的信息來正確診斷您的問題,從我所看到的這些都是潛在的問題和安全缺陷。您的查詢的結構應更象:

private readonly string dbConnection = ConfigurationManager.ConnectionString[".."].ConnectionString; 
private const string queryInsertUser = "INSERT INTO [User] ([FirstName]) VALUES (@FirstName);" 

protected void SaveUser(string firstName) 
{ 
    using(var connection = new SqlConnection(dbConnection)) 
    using(var command = new SqlCommand(queryInsertUser, connection)) 
    { 
      connection.Open(); 
      command.Parameters.Add("@FirstName", SqlDbType.NVarChar).Value = first; 
      command.ExecuteNonQuery(); 
    } 
} 

所以上述防止SQL注入,你會介紹,您可以獲取用戶密碼的網絡上的鹽/散大文章。至於你的其他問題,你會想檢查以下內容:

  • 當你運行一個跟蹤,你看到查詢命中你的SQL實例嗎?
  • 當你瀏覽你的代碼時,它是否輸入catch塊?
  • 您的Sql實例是否實際運行,它是否允許您的應用程序的用戶帳戶運行?

基於代碼,雖然它不是「標準實踐」,但它應該工作。所以我相信你的問題來自你的Sql Express ConnectionString或實例本身。如果沒有更多的信息,將很難正確診斷,但是如果您正確點擊數據庫,跟蹤將會顯示。

+0

非常欣賞伴侶。我是編程新手。還有很多東西需要學習。無論如何,通過代碼工作很好。並能夠確定問題。謝謝您的幫助。 @格雷格 –

相關問題