私はバックグラウンドプロセスでテーブルにデータを挿入しています。更新できませんでした。現在ロックされています
私の場合はCould not update; currently locked.
この表(JobsTemp
)別のプロセスが、アプリケーションの他のプロセスによって操作で任意の場所を使用していません:私は、私は次のエラーを取得するテーブルにデータを挿入しようとすると、同じデータベースのテーブルを使用しています。
- このバグの原因は何ですか。
- データベースがロックされているかどうかを確認できますか?
私たちは、MS Access 2003データベースにWPFアプリケーションを使用してデータを挿入しようとしています。どのようにプログラムでこれを修正するのですか?
private static string dbFile =
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
+ "\\AppData\\LocalAccess.mdb";
private static string ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ dbFile + ";";
public bool SalesTPJob_Insert_InAccessDB(DataTable DT)
{
bool flag = true;
try
{
if (DT != null)
{
if (DT.Rows.Count > 0)
{
string deleteQuery = "DELETE FROM JobsTemp";
DeleteUpdateRecordFromTable(deleteQuery);
string SQL = "SELECT top 1 * FROM JobsTemp";
string INSERT = "INSERT INTO "
+ "JobsTemp([JobId],[CustomerId],[JobName],[JobAddress],[City],"
+ "[State],[Zip],[IsExisting],[Area])"
+ " VALUES (@JobId,@CustomerId,@JobName,@JobAddress,@City,@State,"
+ "@Zip,1,@Area)";
OleDbConnection OleConn = new OleDbConnection(ConnString);
OleDbDataAdapter OleAdp = new OleDbDataAdapter(SQL, OleConn);
OleAdp.InsertCommand = new OleDbCommand(INSERT);
OleAdp.InsertCommand.Parameters.Add("@JobId", OleDbType.VarChar,
1008, "JobId");
OleAdp.InsertCommand.Parameters.Add("@CustomerId", OleDbType.VarChar,
1008, "CustomerId");
OleAdp.InsertCommand.Parameters.Add("@JobName", OleDbType.VarChar,
1008, "JobName");
OleAdp.InsertCommand.Parameters.Add("@JobAddress", OleDbType.VarChar,
1008, "JobAddress");
OleAdp.InsertCommand.Parameters.Add("@City", OleDbType.VarChar,
1008, "City");
OleAdp.InsertCommand.Parameters.Add("@State", OleDbType.VarChar,
1008, "State");
OleAdp.InsertCommand.Parameters.Add("@Zip", OleDbType.VarChar,
4000, "Zip");
OleAdp.InsertCommand.Parameters.Add("@Area", OleDbType.VarChar,
1008, "Area");
OleAdp.InsertCommand.Connection = OleConn;
OleAdp.InsertCommand.Connection.Open();
int i = OleAdp.Update(DT);
OleAdp.InsertCommand.Connection.Close();
}
}
}
catch (Exception ex)
{
LogFile(ex.ToString());
flag = false;
}
return flag;
}
JobsTempは他のプロセスで使用されていません。
public int DeleteUpdateRecordFromTable(string query)
{
using (OleDbConnection OleConn = new OleDbConnection(ConnString))
{
int i = 0;
try
{
OleConn.Open();
OleDbCommand ac = new OleDbCommand(query, OleConn);
i = ac.ExecuteNonQuery();
}
catch (Exception ex)
{
OleConn.Close();
LogFile(ex.ToString());
}
return i;
}
}
どのデータベースを使用していますか? –
@arifhussainshigri:間違ったタグにもかかわらず - 私はMS-Accessを想定しています。特に、この特定のエラーメッセージのために多くの答えが出てくるようです:https://support.microsoft.com/en-gb/kb/918578 – PaulF
これは間違ったタグではない我々はwpfで使用しています。 –