我在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();
}
答案 0 :(得分:4)
我总是对连接字符串中的User Instance=true
感到有点厌倦.....有时,它会“动态”创建一个新的MDF文件,当你更新该MDF时,您的更改可能只是“已消失”您的应用已完成运行....请参阅MSDN docs on User Instances。
我建议你:
在这种情况下,您的数据库连接字符串将类似于:
server=.\\SQLEXPRESS;database=YourDatabaseName;Integrated Security=SSPI;
当你在这里时,我也会建议:
SqlConnection
和SqlCommand
封装到using
块中,以确保妥善处置所以你的代码看起来像这样:
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)
调试!看看你的LinkButton点击事件真的进入Save_Click功能。然后检查'sqlCmd.ExecuteNonQuery();'返回结果。
答案 2 :(得分:0)
您需要在页面加载时编写用于填充Textbox的代码,如下所示:
public page_load()
{
if(!ispostBack)
{
// Write code to fill controls first time
}
}