【发布时间】:2014-08-15 07:48:25
【问题描述】:
你好 StackOverflow 社区,
我正在尝试编写某种审计跟踪功能,它应该能够从 sql 中提取数据(只有一行),向该行添加三列,并将其插入另一个数据库表(审计跟踪表)。
看起来像这样:
逻辑:
1. SELECT * FROM 'Lace' WHERE 'macaddress' = @mac
2. 预先添加用户、操作和时间戳(以了解何时、哪个用户做了什么)
3.将修改后的行添加到LaceAudit表中。
程序如下所示:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
public class Audit2
{
private static string _connectionString = ConfigurationManager.ConnectionStrings["LaceDbConnectionString"].ConnectionString;
public enum Action
{
Login = 0,
NewImageInstall = 1,
OldImageRollback = 2,
LocalScriptUpdate = 3,
LaceOffline = 4,
LaceOnline = 5,
NewLace = 6,
NewDepartment = 7,
NewModel = 8,
AlterModel = 9,
NewHardwareId = 10,
AlterHardwareId = 11
};
public static void AddToLaceAudit(string user, Action action, string mac)
{
// Pull Data with MAC
DataTable dataTable = GetDataOfLace(mac);
// Add needed columns for the new table
dataTable.Columns.Add("user", typeof(string));
dataTable.Columns.Add("action", typeof(int));
// Fill in values for the new columns
// Insert DataTable with new values to database
}
private static DataTable GetDataOfLace(string mac)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
DataTable _dataTable = new DataTable();
string _query = "SELECT * FROM [Lace] WHERE [macaddress] = @mac";
SqlCommand command = new SqlCommand(_query, connection);
command.Parameters.AddWithValue("@mac", mac);
connection.Open();
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(_dataTable);
connection.Close();
da.Dispose();
return _dataTable;
}
}
}
我现在如何向这些列添加值并使用数据库中的新值填充 DataTable? LaceAudit 表已经存在。我只需要添加修改后的行。
【问题讨论】:
-
WHERE [macaddress] = '@mac'应该是WHERE [macaddress] = @mac,否则您正在寻找 macaddress'@mac'这解释了为什么DataTable仍然为空。 -
是的,就像你说的那样。我的问题写错了
-
除此之外,您还不清楚您要达到的目标。什么是属性,为什么不能在
LaceAudit中插入记录? -
我需要在行前添加用户、操作和时间戳并将其插入到 LaceAudit 表中。我的问题是,我不知道如何将这三个属性(用户、操作和时间戳)添加到数据表对象中?
标签: c# sql asp.net sql-server datatable