更新命令神秘地不在ASP.NET中工作

时间:2013-10-17 16:33:22

标签: c# asp.net database ms-access-2007

我有一个ASP.NET应用程序,我将在其中更新一些注释,但该命令不会更新数据库注释。它做了一次,然后决定不再这样做了。在不工作,工作一次然后不再工作之间没有变化。非常奇怪的情况......这是代码。我发现它没有任何问题。

protected void saveNotes_Click(object sender, EventArgs e)
{
     string theNotes = notes.InnerText;
     string[] vars = { "@notes", "@jobNumber" };
     string[] vals = { theNotes, jobNumber };
     HelperMethods.OleDB_Query("UPDATE [Jobs] SET Notes = @notes WHERE Job_Number = @jobNumber", vars, vals);

     test.InnerText = theNotes;
}

我在aspx页面中显示注释,以验证它们确实填充了它们。

这是数据库访问代码:

public static void OleDB_Query(string cmd, string[] vars = null, string[] vals = null)
{
    OleDbConnection Connection = new OleDbConnection(connectionString);
    OleDbCommand Command = new OleDbCommand(cmd, Connection);
    if (vars != null) {
        for (int k = 0; k < vars.Length; k++)
            Command.Parameters.AddWithValue(vars[k], vals[k]);
        Command.Connection.Open();
        Command.ExecuteNonQuery();
        Command.Connection.Close();
    }
}

我正在尝试显示每次更新尝试的作业编号和注释。

我通过网址查询字符串获取工作号码。如果作业编号以零开头,那么零被解析掉,显示的是注释文本,后跟解析的作业编号。如果作业编号不以零开头,则仅显示作业编号。没有任何意义。这是我过去多次做过的非常基本的设置。由于一些奇怪的原因,它决定不再工作了。

3 个答案:

答案 0 :(得分:0)

我猜它与未正确处理连接和命令有关。更新静态帮助程序方法以使用using语句,它应该确保您的连接和命令正在被清理并准备好供下次使用。

public static void OleDB_Query(string cmd, string[] vars = null, string[] vals = null)
{
    using(OleDbConnection Connection = new OleDbConnection(connectionString))
    {
        Command.Connection.Open();
        using(OleDbCommand Command = new OleDbCommand(cmd, Connection))
        {
            if (vars != null) {
                for (int k = 0; k < vars.Length; k++)
                    Command.Parameters.AddWithValue(vars[k], vals[k]);

                Command.ExecuteNonQuery();
        }
        Command.Connection.Close();            
    }
}

答案 1 :(得分:0)

这是否与您将Job_Number作为字符串传递这一事实有关?什么是底层的sql数据类型?如果是charvarchar,则删除前导零会产生不同的Job_Number

考虑将QueryString值解析为int,然后再将其传递给SQL,这将删除所有前导零。

答案 2 :(得分:0)

两个问题(解决了一个问题,解决了一个问题):

解决:

数据未输入数据库,因为在每次页面加载时都重置了jobNumber变量。我尝试使用(!IsPostBack)停止但是变量没有值。因为它似乎在某种程度上失去了它的价值我只是把它放在ViewState中,我能够成功更新数据库。

未解决(但发现的工作)问题:

当我在没有前导零的情况下传递一个工作号码时,一切都很好,花花公子。但是,当我传递一个带有前导零的作业号时,查询字符串会解析它并且我留下了一个不正确的作业号。我在将变量传递到url之前和之后测试了变量。它正在网址中解析。有人知道这是什么一回事吗?我想我只会传递一个额外的变量,它代表前导零的数量,这样我就可以重新开始。