更新asp.net中的数据库无法正常工作

时间:2010-12-27 10:26:03

标签: asp.net sql-server

我在asp.net中有几个文本框,我希望用他们封装的值更新我的数据库。

问题是它不起作用,虽然它不起作用,但语法似乎是正确的并且没有错误存在。这是我的链接按钮:

<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();
}

3 个答案:

答案 0 :(得分:4)

我总是对连接字符串中的User Instance=true感到有点厌倦.....有时,它会“动态”创建一个新的MDF文件,当你更新该MDF时,您的更改可能只是“已消失”您的应用已完成运行....请参阅MSDN docs on User Instances

我建议你:

  • 使用SQL Server Express Management Studio
  • 将MDF文件附加到计算机上的SQL Server Express
  • 然后对SQL Server Express数据库使用基于服务器的方法,而不是附加文件...

在这种情况下,您的数据库连接字符串将类似于:

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

当你在这里时,我也会建议:

  • SqlConnectionSqlCommand封装到using块中,以确保妥善处置
  • 尽可能晚地打开您的连接
  • 使用参数化查询而不是将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();
}

答案 1 :(得分:0)

调试!看看你的LinkBut​​ton点击事件真的进入Save_Click功能。然后检查'sqlCmd.ExecuteNonQuery();'返回结果。

答案 2 :(得分:0)

您需要在页面加载时编写用于填充Textbox的代码,如下所示:

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

}