使用c#在asp.net中的表中保存数据时出现问题

时间:2011-04-18 15:37:59

标签: c# asp.net visual-studio-2008 sql-server-2005-express

您好我的应用程序今天遇到了一个主要问题:

我正在使用vs2008 prof的sql server 2005 express edition。

问题是当我尝试对一个表中的行进行更新时,update.executeNonQuery()返回值1,这意味着有1行已更新但行未更新。

如果我尝试通过打开表数据并修改字段来手动修改该值,它会起作用并保存,但除此之外它什么都不做。

我还尝试在使用相同软件包的另一台机器上运行它,同样的事情也试图通过IIS7运行它,问题不会消失。

任何人都可以提出一些建议,我应该怎么做,或者如果有人遇到这个问题,我真的需要帮助,我将非常感谢!

稍后编辑: - 添加了源代码

    int user_id = (int)Session["UserId"];
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    con.Open();
    SqlCommand update = new SqlCommand("update profil_candidat set nume = @pnume, prenume = @pprenume, data_nasterii = @pdata_nasterii, id_oras = @pid_oras , adresa = @padresa where id_utilizator=@pid_utilizator",con);
    update.Parameters.Add("pnume", SqlDbType.VarChar);
    update.Parameters.Add("pprenume", SqlDbType.VarChar);
    update.Parameters.Add("pdata_nasterii", SqlDbType.VarChar);
    update.Parameters.Add("pid_oras", SqlDbType.VarChar);
    update.Parameters.Add("padresa", SqlDbType.VarChar);
    update.Parameters.Add("pid_utilizator",SqlDbType.Int);
    int an = Convert.ToInt32(AnDropDownList.SelectedItem.Value);
    int luna = Convert.ToInt32(LunaDropDownList.SelectedItem.Value);
    int zi = Convert.ToInt32(ZiDropDownList.SelectedItem.Value);
    DateTime data = new DateTime(an, luna, zi);
    update.Parameters["pnume"].Value = TextBoxNume.Text;
    update.Parameters["pprenume"].Value = TextBoxPrenume.Text;
    update.Parameters["pdata_nasterii"].Value = data;
    update.Parameters["pid_oras"].Value = DropDownList1.SelectedItem.Value;
    update.Parameters["padresa"].Value = TextBoxAdresa.Text;
    update.Parameters["pid_utilizator"].Value = int.Parse(Session["UserId"].ToString());
    update.ExecuteNonQuery();
    con.Close();

稍后编辑

问题解决了,实际上它与以下内容有关:

C# Update Table using SqlCommand.Parameters ASP.NET

有人忘了将表单初始化放在if(Page.IsPostBack)的页面加载中,并且dbase没有任何问题,但语句中发送的参数总是在事件上预加载...仍然感谢你的提示答案!

2 个答案:

答案 0 :(得分:0)

我最后一次遇到这是一个权限问题。无论出于何种原因,SQL服务器没有返回正确的错误消息,而是指示基础表正在更新......即使它没有。

使用与web.config中完全相同的凭据连接到SQL Express实例。然后执行相同的查询,看看会发生什么。

答案 1 :(得分:-1)

如果executeNonQuery返回1,那么它可能正在某处成功更新,否则您应该抛出异常或返回0。检查web.config中的连接字符串,并验证您的站点是否指向您认为的数据库。

<强>更新

连接字符串Data Source=.\SQLEXPRESS的一部分意味着您要连接到localhost上名为SQLEXPRESS的SQL Server实例,因此如果您将项目部署到另一台计算机,它将不再是连接到存储在计算机上的同一个.mdf文件,它将使用另一台计算机上的.mdf文件。有关使用用户实例数据库并从Server Management Studio连接到该数据库的更多详细信息,请参阅此MSDN博客文章:

Connecting to SQL Express User Instances in Management Studio