【发布时间】:2013-03-04 15:03:23
【问题描述】:
所以我正在开发一个数据库程序,它需要使用 INSERT INTO 命令将日志插入数据库,但是执行查询后表仍然为空。请帮忙!谢谢~这是代码。
//Predefined connection string
OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\xxx\Desktop\data.mdb;Jet OLEDB:Database Password=xxx;");
private void Login_Load(object sender, EventArgs e)
{
Log("StartUp", "System", "NULL", "System StartUp");
}
public void Log(string Type, string User, string Table_affected, string Remarks)
{
string NowDateStamp = string.Format("{0}/{1}/{2}",
DateTime.Now.Day.ToString(),
DateTime.Now.Month.ToString(),
DateTime.Now.Year.ToString());
string NowTimeStamp = string.Format("{0}:{1}:{2}",
DateTime.Now.Hour.ToString(),
DateTime.Now.Minute.ToString(),
DateTime.Now.Second.ToString());
string tempSQL = string.Format("INSERT INTO 'Log' VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')",
NowDateStamp,
NowTimeStamp,
Type,
User,
Table_affected,
Remarks);
vcon.Open();
OleDbCommand vcom = new OleDbCommand(tempSQL, vcon);
vcom.ExecuteNonQuery();
MessageBox.Show("Done"); // <-- This MessageBox isn't even showing.
vcon.Close();
}
所以基本上程序会启动然后记录时间,但是它似乎对数据库没有做任何事情,任何人都可以帮助我吗?谢谢!
【问题讨论】:
-
您是否看到任何运行时错误?您还必须使用 Access - SQLServer CE4.0 是一个很好的选择吗?
-
在调试模式下运行,猜测那里有错误,否则你会得到消息框,正如你所指出的。
-
对于您的时间戳,您可以只使用
var nowDateStamp = DateTime.Now.ToString("dd/MM/yyyy");和var nowTimeStamp = DateTime.Now.ToString("HH:mm:ss");,这与您的问题无关,但可能会使您的代码更具可读性 =) -
您的 INSERT INTO 命令容易受到sql injection 攻击。你应该总是use parameters with QleDbCommand 而不是用值格式化字符串。
-
为丹科+1。永远不要在所有查询字符串中使用格式化字符串。