C# 我的IF语句有什么问题?
我正在创建一个审核表,我已经完成了简单的插入和删除审核方法。我对更新方法有点迷恋——我需要能够获取数据库中的当前值,查询参数中的新值,并比较两者,以便将旧值和更改后的值输入数据库中的表中 这是我的密码:C# 我的IF语句有什么问题?,c#,sql,if-statement,sqldatasource,C#,Sql,If Statement,Sqldatasource,我正在创建一个审核表,我已经完成了简单的插入和删除审核方法。我对更新方法有点迷恋——我需要能够获取数据库中的当前值,查询参数中的新值,并比较两者,以便将旧值和更改后的值输入数据库中的表中 这是我的密码: protected void SqlDataSource1_Updating(object sender, SqlDataSourceCommandEventArgs e) { string[] fields = null; string fiel
protected void SqlDataSource1_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
string[] fields = null;
string fieldsstring = null;
string fieldID = e.Command.Parameters[5].Value.ToString();
System.Security.Principal. WindowsPrincipal p = System.Threading.Thread.CurrentPrincipal as System.Security.Principal.WindowsPrincipal;
string[] namearray = p.Identity.Name.Split('\\');
string name = namearray[1];
string queryStringupdatecheck = "SELECT VAXCode, Reference, CostCentre, Department, ReportingCategory FROM NominalCode WHERE ID = @ID";
string queryString = "INSERT INTO Audit (source, action, itemID, item, userid, timestamp) VALUES (@source, @action, @itemID, @item, @userid, @timestamp)";
using (SqlConnection connection = new SqlConnection("con string = deleted for privacy"))
{
SqlCommand commandCheck = new SqlCommand(queryStringupdatecheck, connection);
commandCheck.Parameters.AddWithValue("@ID", fieldID);
connection.Open();
SqlDataReader reader = commandCheck.ExecuteReader();
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount - 1; i++)
{
if (reader[i].ToString() != e.Command.Parameters[i].Value.ToString())
{
fields[i] = e.Command.Parameters[i].Value.ToString() + "Old value: " + reader[i].ToString();
}
else
{
}
}
}
fieldsstring = String.Join(",", fields);
reader.Close();
SqlCommand command = new SqlCommand(queryString, connection);
command.Parameters.AddWithValue("@source", "Nominal");
command.Parameters.AddWithValue("@action", "Update");
command.Parameters.AddWithValue("@itemID", fieldID);
command.Parameters.AddWithValue("@item", fieldsstring);
command.Parameters.AddWithValue("@userid", name);
command.Parameters.AddWithValue("@timestamp", DateTime.Now);
try
{
command.ExecuteNonQuery();
}
catch (Exception x)
{
Response.Write(x);
}
finally
{
connection.Close();
}
}
}
我遇到的问题是fields[]数组总是空的。尽管VS debug窗口显示e.Command.Parameter.Value[i]和读取器[i]不同,但fields变量似乎从未被输入
谢谢您从未将字段[]设置为null以外的任何值,因此当您尝试访问它时,它是null。您需要先创建数组,然后才能为其赋值。尝试:
SqlDataReader reader = commandCheck.ExecuteReader();
fields = new string[reader.FieldCount]
我真的不明白您在这里做什么,但是如果您正在进行审计,为什么不将每个更改连同时间戳一起插入到审计表中呢?Do fields=new string[reader.FieldCount],这样您就可以分配一个数组。您试图写入null[0]。但是在for循环的IF语句中,我将字段的[I]索引设置为参数值等。我觉得非常愚蠢,忘记了在声明数组后必须“创建”它。谢谢@克里斯,很乐意帮忙。如果我的回答有帮助,请记住投票赞成或接受。这是一个想法,但与我的主管交谈时,他们只希望审核更新的字段及其旧值。您听说过代码注释吗?:-