2010-12-27 7 views
0

asp.net에 몇 개의 텍스트 상자가 있는데, 캡슐화 된 값으로 데이터베이스를 업데이트하고 싶습니다.asp.net에서 데이터베이스 업데이트가 작동하지 않습니다.

문제는 작동하지 않으며 작동하지 않지만 구문이 정확하고 오류가없는 것입니다. 나는 항상 연결 문자열에 User Instance=true가 ..... 시간에, 그것은을 생성하는 경향에 대해 조금 피곤 해요

<asp:linkbutton id="clickOnSave" runat="server" 
       onclick="Save_Click" Text="Save Profile" /> 

내 갱신 기능

protected void Save_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
    con.ConnectionString = "DataSource=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\alex\\Documents\\seeubook_db.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; 

    con.Open(); 

    String commandString = "UPDATE users SET last_name='" + Text4.Text.Trim() + "' , first_name='" + Textbox1.Text.Trim() + "' , about_me='" + Textbox5.Text.Trim() + "' , where_i_live='" + Textbox2.Text.Trim() + "' , where_i_was_born='" + Textbox3.Text.Trim() + "' , work_place='" + Textbox4.Text.Trim() + "' WHERE email='" + Session["user"] + "'"; 

    SqlCommand sqlCmd = new SqlCommand(commandString, con); 
    sqlCmd.ExecuteNonQuery(); 
    con.Close(); 
} 
+1

코드 포맷하는 방법하십시오 - 아닌'>', 4 개 공간. – Oded

+0

그냥 텍스트 서식을 지정했습니다. 죄송합니다. – Alex

+1

시간이 있으면 LINQ to SQL을 살펴 보시기 바랍니다. ADO.NET보다 큰 발전입니다. –

답변

4

: 여기 내하는 LinkButton입니다 새로운 MDF 파일을 "즉석에서"저장하고 MDF를 업데이트하면 변경 사항이 앱이 실행 완료된 "사라짐"일 수 있습니다 .... MSDN docs on User Instances을 참조하십시오.

  • 는 다음 SQL 서버로 서버 기반 접근 방식을 사용하여 SQL Server Express를 Management Studio를 사용하여 컴퓨터에 SQL Server Express에로 MDF 파일을 첨부 :

    난 당신이 제안했다

    0 : 특급 데이터베이스 오히려이 경우 파일 ...

를 부착보다, 데이터베이스 연결 문자열은 다음과 같을 것

server=.\\SQLEXPRESS;database=YourDatabaseName;Integrated Security=SSPI; 

그리고 당신이 그것에있는 동안, 나는 또한에 추천 할 것입니다 : 가능한 늦게

  • 로 연결을 열고 적절한 처리를
  • 을 보장하기 위해 using 블록으로 SqlConnectionSqlCommand 포장

    • SQL 명령을 연결하는 대신 매개 변수가 사용 된 을 사용하십시오. 이렇게하면 SQL 주입 공격에 대한 열린 문이 열립니다!

    그래서 코드를 다음과 같이 보일 것입니다 :

    string connStr = "server=.\\SQLEXPRESS;database=YourDatabaseName;Integrated Security=SSPI;"; 
    
    string cmdStmt = "UPDATE dbo.Users SET last_name = @lastName, " + 
        "first_name = @firstName, about_me = @aboutMe, where_i_live = @whereILive, " + 
        "where_i_was_born = @whereIWasBorn, work_place = @workPlace " + 
        "WHERE email = @userEMail"; 
    
    using(SqlConnection sqlCon = new SqlConnection(connStr)) 
    using(SqlCommand sqlCmd = new SqlCommand(cmdStmt, sqlCon)) 
    { 
        // define parameters 
        sqlCmd.Parameters.Add("@lastName", SqlDbType.VarChar, 50); 
        sqlCmd.Parameters["@lastName"].Value = Text4.Text.Trim(); 
        // and so on for all the parameters 
    
        sqlCon.Open(); 
        sqlCmd.ExecuteNonQuery(); 
        sqlCon.Close(); 
    } 
    
  • +0

    여전히 작동하지 않습니다. 문제는 내가 "page_load"함수에 업데이트 코드를 넣을 때 작동하지만, 저장 함수에 넣을 때 작동하지 않는다는 것입니다. 저장 함수를 입력하고 .ExecuteNonQuery()가 1을 반환한다는 것을 확인 했으므로 작동하지 않는 이유를 모르겠습니다. – Alex

    +0

    ok marc, 전자 메일로 프로젝트 + mdf를 보내 드리겠습니다.여분의 노력에 감사드립니다. – Alex

    0

    디버그! LinkButton Click 이벤트가 실제로 Save_Click 함수로 이동합니다. 그리고 'sqlCmd.ExecuteNonQuery();'를 확인하십시오. 결과를 반환하십시오.

    +0

    함수에 들어가고 함수는 "1"을 반환합니다. 그러나 변경 사항은 발생하지 않습니다. – Alex

    0

    당신은 아래 페이지로드에서 텍스트 상자의를 채우는 코드를 작성해야합니다

    public page_load() 
    { 
        if(!ispostBack) 
        { 
        // Write code to fill controls first time 
        } 
    

    }

    관련 문제