c#sqlite数据库在插入时被锁定

时间:2016-07-21 00:55:38

标签: c# sqlite

我在C#中使用SQLite

我在获胜形式中有一个插入查询,但是在另一个没有形式的胜利形式上有效。当我读到这个问题时,它说它可能是因为某个地方有一个开放的连接,但我已经检查了所有内容,甚至在每次关闭后都使用了var map; var marker; var myCircle; function placeMarker(location, radius) { if (typeof radius === 'undefined') { radius = initialRadius; } if (marker) { marker.setPosition(location); } else { marker = new google.maps.Marker({ position: location, map: map, draggable: true }); } if (myCircle) { // Don't create new circle, update circle position instead. myCircle.setCenter(location); // where location=latLng } else { // First time loading, create the circle myCircle = new google.maps.Circle({ map: map, radius: radius, fillColor: '#AA0000', }); myCircle.bindTo('center', marker, 'position'); } } function initialize() { map = new google.maps.Map(document.getElementById('map'), { center: {lat: 0, lng: 0}, zoom: 1 }); google.maps.event.addListener(map, 'click', function (event) { placeMarker(event.latLng); }); google.maps.event.addDomListener(window, "resize", function () { var center = map.getCenter(); google.maps.event.trigger(map, "resize"); map.setCenter(center); }); } 。现在第一个winform只有1个开/关,另一个有3个。

我已经尝试使用SQLite浏览器进行查询,以确保它不是查询的问题,并且它成功运行。现在,当我调试问题时,当该行执行SQLiteConnection.ClearAllPools();,当然,执行查询(插入....)。所以我尝试更改表主键的类型(从varchar到整数)。我仍然有这个问题。下面是它的总和。

cmd.ExecuteNonQuery();

3 个答案:

答案 0 :(得分:0)

您是否尝试使用using语句包装连接?

using(var myconnection = new SQLiteConnection(connectionString))
{

    myconnection.Open();

    //Your code here

}

无论执行路径如何,这都将调用连接的Dispose方法,这可能不仅仅是关闭连接。

答案 1 :(得分:0)

注意在SQLite 浏览器上点击Write changes
如果它正在运行并且有任何未保存的更改!

Sqlite browser

在我的情况下,我很愚蠢,我在 SQLite 浏览器中进行更改并且没有点击写入更改,这锁定了要由服务修改的数据库。单击“写入更改”按钮后,所有发布请求都按预期工作。
根据@Rohan Shenoy 在本主题中的说法:SQLite Database Locked exception

答案 2 :(得分:-1)

可能你也应该试试这个

using (var con = new SQLiteConnection { ConnectionString = "connectionstring" })
{
     using(var cmd = new SQLiteCommand { Connection = con })
     {
         // check state connection if open then close, else close proceed
         if(con.State == ConnectionState.Open)
           con.Close();

         //then
         try
         {
            // try connection to Open
            con.Open();
         }
         catch
         {
            //catch if found error, message : 'Invalid Connection string'
         }

         ........ // insert query here

     } // Close Command

}  // Close Connection