0

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

我正在使用 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# 使用 SqlCommand.Parameters ASP.NET 更新表

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

4

2 回答 2

0

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

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

于 2011-04-18T15:46:37.353 回答
-1

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

更新

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

在 Management Studio 中连接到 SQL Express 用户实例

于 2011-04-18T15:42:03.500 回答