数据库说它正在插入,但没有记录

时间:2011-08-28 22:14:32

标签: c# database ms-access insert

我正在向数据库发送一个命令,它返回1行受到影响,但是当我查看数据库时,没有记录。我没有收到任何错误。我检查以确保字符串正确构建,它是。有任何想法吗?我知道,我在这里没有使用参数化查询。我会晚点。以下是数据库层的代码:

public int InsertStartTime(certificate cert, DateTime startTime, string lineNumber)
        {
            string sql = "INSERT INTO checkLog(userID,lineNumber,startTime) VALUES(" +
                         cert.userID + ", '" + lineNumber + "', '" + startTime + "');";
            int result = 0;

            try
            {
                conn.Open();
                comm.CommandText = sql;
                result = comm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();
            }

            MessageBox.Show(result.ToString() + " rows affected");
            return result;
        }

使用access 2000 db文件:

string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\assets\users.mdb;Persist Security Info=True";

3 个答案:

答案 0 :(得分:5)

右键单击VS中的数据库文件,然后查看属性。它是否设置为“始终复制”?默认情况下,visual studio将制作数据库的副本以进行调试,并且只对此副本进行任何更改,并且不会反映在原始数据库中。如果要在调试模式下处理“真实”数据库文件,可以将其设置为“从不”。

答案 1 :(得分:1)

根据您使用的数据库/数据提供程序,您的SQL命令可能无法在自动提交模式下执行。

尝试明确提交您的交易。像这样:

conn.Open();
using (var tran = conn.BeginTransaction()) {
    comm.Transaction = tran; // Possibly redundant, depending on database.
    comm.CommandText = sql;
    result = comm.ExecuteNonQuery();
    tran.Commit();
}

答案 2 :(得分:1)

没有其他人指出这一点,所以我会。请不要这样使用SQL。使用参数。否则你会对sql攻击敞开大门。

  string sql = "INSERT INTO checkLog(userID,lineNumber,startTime) VALUES(@ID, @line, @starttime);
        try
        {
            conn.Open();
            comm.CommandText = sql;
            comm.Parameters.Add("ID").Value = cert.userID;
            comm.Parameters.Add("line").Value = lineNumber ;
            comm.Parameters.Add("starttime").Value = startTime ;
            result = comm.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }