2010-12-27 9 views
0

私はasp.netにいくつかのテキストボックスを持っています。私はそれらのデータがカプセル化した値でデータベースを更新したいと思います。asp.netのデータベースを更新できません

問題は機能しませんし、動作しませんが、構文は正しいように見え、エラーはありません。ここに私のLinkBut​​tonコントロールは次のとおりです。

<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

私はいつもの時間に、接続文字列でUser Instance=true .....について少し疲れたよ、それが作成する傾向があります新しいMDFファイルを「オンザフライ」で作成し、そのMDFを更新すると、あなたの変更がアプリが実行完了したばかりの「消えた」かもしれません.... MSDN docs on User Instancesを参照してください。

私はあなたのことを示唆している:

  • は、あなたのSQL Serverにサーバーベースののアプローチを使用してSQL Server Expressの管理Studio
  • を使用して、あなたのマシン上のSQL Server ExpressにあなたのMDFファイルを添付

    0:Expressのデータベースではなく、その場合には、ファイル...

を取り付けるよりも、データベースの接続文字列は、次のようになります

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

そして、あなたはそれでいる間、私はまたに推薦する:

  • 適切な処分を確保するためにusingブロックにあなたのSqlConnectionSqlCommandを包むように後半
  • 可能な限りあなたの接続を開きます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

デバッグを!あなたのLinkBut​​ton Clickイベントを見て、実際にSave_Click関数に行きます。そして、 'sqlCmd.ExecuteNonQuery();'をチェックしてください。結果を返す。

+0

関数に入り、関数は "1"を返します。しかし、変化は起こらない – Alex

0

あなたは以下のように、ページの読み込み時にテキストボックスのを充填するためのコードを記述する必要があります。

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

}

関連する問題