我正在处理存储用户信息的Web应用程序,我希望将数据库中的用户详细信息放入文本框中,我可以在其中更改数据并使用按钮将来自相同文本框的数据存储到同一个表中database.it就像更新/编辑用户配置文件一样 到目前为止,我能够将数据导入文本框,但我无法更新数据。页面提交数据但数据库没有变化
html&我正在使用的代码是:
<div id="pagebody" style="width: 80%; height: 120%; margin: auto;">
<div id="personalinfodiv" class="try" align="center" style="background-color: white; width: 80%; border: 1px solid gray; margin: auto">
<h3 align="center" >Personal information</h3>
<table>
<tr><td><asp:Label ID="fname" runat="server" Text="First Name :" Font-Bold="true" ForeColor="GrayText"></asp:Label></td> <td><asp:TextBox cssClass="textbox1" ID="firstnametext" runat="server"></asp:TextBox></td></tr>
<tr><td><asp:Label ID="lname" runat="server" Text="Last Name :" Font-Bold="true" ForeColor="GrayText"></asp:Label></td> <td><asp:TextBox cssClass="textbox1" ID="lastnametext" runat="server"></asp:TextBox></td></tr>
<tr><td><asp:Label ID="gender" runat="server" Text="Gender :" Font-Bold="true" ForeColor="GrayText"></asp:Label></td> <td><asp:DropDownList cssClass="textbox1" ID="gendertext" runat="server" DataSourceID="SqlDataSource1" DataTextField="Gender" DataValueField="Gender"><asp:ListItem Text="Male" Value="1"></asp:ListItem><asp:ListItem Text="Female" Value="2"></asp:ListItem></asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Koshur %>" SelectCommand="SELECT [Gender] FROM [userdetails] WHERE ([Username] = @Username)">
<SelectParameters>
<asp:QueryStringParameter Name="Username" QueryStringField="user" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</td></tr>
<tr><td><asp:Label ID="dob" runat="server" Text="Date of Birth :" Font-Bold="true" ForeColor="GrayText"></asp:Label></td> <td><asp:TextBox cssClass="textbox1" ID="dobtext" runat="server"></asp:TextBox>
</td></tr>
<tr><td><asp:Label ID="Contactno" runat="server" Text="Contact No :" Font-Bold="true" ForeColor="GrayText"></asp:Label></td> <td><asp:TextBox cssClass="textbox1" ID="contacttext" runat="server"></asp:TextBox>
</td></tr>
</table>
用于数据检索的C#:
string CSs = ConfigurationManager.ConnectionStrings["Koshur"].ConnectionString;
using (SqlConnection conn = new SqlConnection(CSs))
{
string query = "select * from userdetails where Username='" + HttpContext.Current.User.Identity.Name.ToString() + "';";
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "userdetails");
firstnametext.Text=ds.Tables["userdetails"].Rows[0]["Firstname"].ToString();
lastnametext.Text = ds.Tables["userdetails"].Rows[0]["Lastname"].ToString();
dobtext.Text = ds.Tables["userdetails"].Rows[0]["Dateofbirth"].ToString();
contacttext.Text = ds.Tables["userdetails"].Rows[0]["ContactNO"].ToString();
}
c#将数据更新到表格中 我正在使用存储过程
protected void savecontinue_Click(object sender, EventArgs e)
{
// Response.Redirect("test.aspx?q=" + firstnametext.Text +"&" + lastnametext.Text);
string ct = ConfigurationManager.ConnectionStrings["Koshur"].ConnectionString;
using (SqlConnection con = new SqlConnection(ct))
{
SqlCommand cmnd = new SqlCommand("spupdateuserprofiledetails", con);
cmnd.CommandType = CommandType.StoredProcedure;
SqlParameter first = new SqlParameter("@Firstname", firstnametext.Text);
SqlParameter last =new SqlParameter("@Lastname", lastnametext.Text);
SqlParameter dobb=new SqlParameter("@Dateofbirth", dobtext.Text);
SqlParameter connt=new SqlParameter("@ContactNo", contacttext.Text);
SqlParameter userna = new SqlParameter("@Username", HttpContext.Current.User.Identity.Name.ToString());
cmnd.Parameters.Add(first);
cmnd.Parameters.Add(last);
cmnd.Parameters.Add(dobb);
cmnd.Parameters.Add(connt);
cmnd.Parameters.Add(userna);
con.Open();
cmnd.ExecuteNonQuery();
}
}
}
这是我的存储过程
create proc spupdateuserprofiledetails
@Firstname varchar(100),
@Lastname Varchar(100),
@Dateofbirth varchar(100),
@ContactNo varchar(100),
@Username varchar(100)
as
begin
update Userdetails
set Firstname=@Firstname,Lastname=@Lastname,Dateofbirth=@Dateofbirth,ContactNO=@ContactNo
where Username=@Username
end
答案 0 :(得分:1)
花了很多时间,但最终我得到了答案。这只是一个幸运的猜测。
我能够通过包装数据检索代码来解决我的问题:
if (!IsPostBack)
{
string CSs = ConfigurationManager.ConnectionStrings["Koshur"].ConnectionString;
using (SqlConnection conn = new SqlConnection(CSs))
{
string query = "select * from userdetails where Username='" +
HttpContext.Current.User.Identity.Name.ToString() + "';";
SqlCommand cmd = new SqlCommand(query, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "userdetails");
firstnametext.Text = ds.Tables["userdetails"].Rows[0]["Firstname"].ToString();
lastnametext.Text = ds.Tables["userdetails"].Rows[0]["Lastname"].ToString();
dobtext.Text = ds.Tables["userdetails"].Rows[0]["Dateofbirth"].ToString();
contacttext.Text = ds.Tables["userdetails"].Rows[0]["ContactNO"].ToString();
}
}
这很好用。我能够完美地检索数据,并且能够使用相同的文本框将其保存到数据库中。这是我的基本要求。我没有更改任何将数据保存到数据库中的代码(即保存按钮事件)。
答案 1 :(得分:0)
我认为这与为SqlCommand
集合添加参数的方式有关。或者,您传递给存储过程的参数值(Username
)可能与您在条件中指定的数据库值不匹配。可以检查两个@Username
的值,UserName
列中数据库中的值不包含任何空格。
尝试以下代码,看看它是否有帮助。您可以使用隐式转换类型的AddWithValue
替换SqlParameterCollection.Add
方法。这是link,您可以在这里研究两者之间的差异。
using (SqlConnection con = new SqlConnection(ct))
{
using (SqlCommand cmnd = new SqlCommand("spupdateuserprofiledetails", con))
{
cmnd.CommandType = CommandType.StoredProcedure;
string userName = HttpContext.Current.User.Identity.Name.ToString();
cmnd.Parameters.AddWithValue("@FirstName", firstnametext.Text));
cmnd.Parameters.AddWithValue("@LastName", lastnametext.Text));
cmnd.Parameters.AddWithValue("@Dateofbirth", dobtext.Text));
cmnd.Parameters.AddWithValue("@ContactNo", contacttext.Text));
cmnd.Parameters.AddWithValue("@Username", userName));
// Or If you are planning to use the `Add` method instead of the `AddWithValues` then make sure you explicitly specify the type of the parameter you pass to the stored procedure.
// cmnd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = firstnametext.Text;
// cmnd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = lastnametext.Text;
// and so on
con.Open();
cmnd.ExecuteNonQuery();
}
}