0

我有一个 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();
    }
}

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

我通过 URL 查询字符串获取工作编号。如果作业编号以零开头,则所有零都被解析掉,并且显示的是注释文本,后跟解析的作业编号。如果作业编号不以零开头,则仅显示作业编号。没有任何意义。这是一个非常基本的设置,我过去做过很多次。只是出于某种奇怪的原因决定不再工作。

4

3 回答 3

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();            
    }
}
于 2013-10-17T16:41:08.917 回答
0

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

解决了:

数据未输入到数据库中,因为在每次页面加载时都会重置 jobNumber 变量。我尝试使用 (!IsPostBack) 停止,但变量没有任何值。由于它似乎以某种方式失去了它的价值,我只是将它卡在 ViewState 中,并且我能够成功更新数据库。

未解决(但可以解决)问题:

当我传递一个没有前导零的工作编号时,一切都很好而且花花公子。但是,当我传递带有前导零的作业编号时,查询字符串会对其进行解析,并且留下一个不正确的作业编号。我在通过 url 传递变量之前和之后测试了变量。它在 url 中被解析。有人知道这是什么一回事吗?我在想我会传递一个额外的变量,它代表前导零的数量,这样我就可以把它们粘回去了。

于 2013-10-17T19:13:21.343 回答
0

这可能与您将您Job_Number的字符串作为字符串传递的事实有关吗?什么是底层 sql 数据类型?如果是charor varchar,去掉前导零会产生不同的Job_Number.

考虑在将QueryStringint传递给 SQL 之前将其解析为 a,这将去除所有前导零。

于 2013-10-17T16:57:57.763 回答