我有一个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();
}
}
我正在尝试显示每次更新尝试的作业编号和注释。
我通过网址查询字符串获取工作号码。如果作业编号以零开头,那么零被解析掉,显示的是注释文本,后跟解析的作业编号。如果作业编号不以零开头,则仅显示作业编号。没有任何意义。这是我过去多次做过的非常基本的设置。由于一些奇怪的原因,它决定不再工作了。
答案 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数据类型?如果是char
或varchar
,则删除前导零会产生不同的Job_Number
。
考虑将QueryString
值解析为int
,然后再将其传递给SQL,这将删除所有前导零。
答案 2 :(得分:0)
两个问题(解决了一个问题,解决了一个问题):
解决:
数据未输入数据库,因为在每次页面加载时都重置了jobNumber变量。我尝试使用(!IsPostBack)停止但是变量没有值。因为它似乎在某种程度上失去了它的价值我只是把它放在ViewState中,我能够成功更新数据库。
未解决(但发现的工作)问题:
当我在没有前导零的情况下传递一个工作号码时,一切都很好,花花公子。但是,当我传递一个带有前导零的作业号时,查询字符串会解析它并且我留下了一个不正确的作业号。我在将变量传递到url之前和之后测试了变量。它正在网址中解析。有人知道这是什么一回事吗?我想我只会传递一个额外的变量,它代表前导零的数量,这样我就可以重新开始。