[英]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.