簡體   English   中英

數據庫說它正在插入,但是沒有記錄

[英]database says that it is inserting, but there are no records

我正在向數據庫發送命令,它返回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";

在VS中右鍵單擊數據庫文件,然后查看屬性。 是否設置為“始終復制”? 默認情況下,Visual Studio將復制您的數據庫以進行調試,並且僅對該副本進行任何更改,而不會在原始副本中反映出來。 如果要即使在調試模式下也要處理“真實”數據庫文件,可以將其設置為復制“從不”。

根據您使用的數據庫/數據提供程序的不同,SQL命令可能不會在自動提交模式下執行。

嘗試顯式提交事務。 像這樣:

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

沒有人指出這一點,所以我會的。 請不要以這種方式使用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);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM