我想更改保存在db中的密码,但我的代码不起作用。怎么了?我总是看到最后一条消息:
unable to connect database
public partial class pws : System.Web.UI.Page
{
static string strcon = (System.Web.Configuration.WebConfigurationManager.ConnectionStrings["strcon"].ConnectionString);
protected void Page_Load(object sender, EventArgs e)
{
}
private void ShowPopUpMsg(string msg)
{
StringBuilder sb = new StringBuilder();
sb.Append("alert('");
sb.Append(msg.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
sb.Append("');");
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "showalert", sb.ToString(), true);
}
protected void btnInsert_Click(object sender, EventArgs e)
{
try {
SqlConnection db = new SqlConnection(strcon);
db.Open();
string strId = string.Empty;
string strusername = string.Empty;
string OLdpassword = string.Empty;
SqlCommand cmd;
cmd = new SqlCommand("SELECT * FROM login WHERE login_username =@login_username ", db);
cmd.Parameters.AddWithValue("login_username", txtOldUsername.Text);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
cmd = null;
db.Close();
db.Open();
SqlDataReader DR;
DR = cmd.ExecuteReader();
if (DR.Read())
{
strId = DR["login_id"].ToString();
strusername = DR["login_username"].ToString();
OLdpassword = DR["login_Password"].ToString();
}
db.Close();
if (OLdpassword == txtOldPass.Text)
{
db.Open();
string Command = "Update login Set login_Password= @login_Password WHERE login_username=@login_username";
SqlCommand cmdIns = new SqlCommand(Command, db);
cmdIns.Parameters.AddWithValue("@login_Password ", txtNewPass.Text);
cmdIns.Parameters.AddWithValue("@login_username ", txtOldUsername.Text);
cmdIns.ExecuteNonQuery();
cmdIns.Parameters.Clear();
cmdIns.Dispose();
cmdIns = null;
db.Close();
ShowPopUpMsg("successful");
}
else
{
ShowPopUpMsg(" old pass is not correct");
}
}
catch
{
ShowPopUpMsg("unable to connect database");
}
}
}
答案 0 :(得分:1)
这一部分:
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="Transparent" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
为什么要执行非查询,这是一个查询(select * from ...)?
为什么要处理SqlCommand对象cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
cmd = null;
db.Close();
db.Open();
SqlDataReader DR;
DR = cmd.ExecuteReader();
,为什么在处理后重用它?
为什么你关闭并打开下面的一行?
我会改写这样的行:
cmd
我会建议使用using语句或在finally块中关闭连接:
SqlDataReader DR = cmd.ExecuteReader();
另一件事:我会在update语句中使用主键。 SqlConnection db = new SqlConnection(strcon);
try{
db.Open();
//.... the rest
}
catch(Exception ex)
{
ShowPopUpMsg("unable to connect database: " + ex.Message);
}
finally
{
db.Close();
}
而不是用户名。除非用户名设置为“唯一”
答案 1 :(得分:0)
检查您是否可以使用凭据和数据库管理工具连接到数据库(我假设您使用的是MS SQL Server,因此请使用MS SQL Server Management Studio)
检查连接字符串的格式是否正确。您可以使用此网站http://www.connectionstrings.com/来执行此操作。
我希望这会对你有所帮助。
答案 2 :(得分:0)
尝试单步执行代码并找到异常发生的位置,并查看异常的详细信息。
我的猜测是连接字符串(strcon)有问题。