C# 在winform中使用sqlite数据库,查询可是,但是执行更新语句就报错

PHP_Reader 2018-07-24 09:40:00
1、使用如下查询可以获得结果
public static DataTable ExecuteTable(string sql, params SQLiteParameter[] param)
{
DataTable dt = new DataTable();
using (SQLiteDataAdapter sda = new SQLiteDataAdapter(sql, str))
{
if (param != null)
{
sda.SelectCommand.Parameters.AddRange(param);
}
sda.Fill(dt);
}
return dt;
}



2、而使用ExecuteNonQuery,则报错
 public static int ExecuteNonQuery(string sql, params SQLiteParameter[] param)
{
using(SQLiteConnection con = new SQLiteConnection(str))
{
using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
con.Open();
if(param != null)
{
cmd.Parameters.AddRange(param);
}
return cmd.ExecuteNonQuery();
}
}
}



3、连接字符串如下:
cater.db 放在 bin/dubug下

 <connectionStrings>
<add connectionString="Data Source=cater.db;Version=3;Pooling=True" name="conStr"/>
</connectionStrings>

...全文
590 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
PHP_Reader 2018-07-24
  • 打赏
  • 举报
回复
引用 6 楼 xbingyou 的回复:
看看执行的SQL语句有没有缺少标点


sql语句如下:

public int DeleteMemmberByMemberId(int memmberId)
{
string sql = "UPDATE `MemmberInfo` SET `DelFlag`=1 WHERE `MemmberId`=1";
return SqliteHelper.ExecuteNonQuery(sql);
}
昨天忆 2018-07-24
  • 打赏
  • 举报
回复
看看执行的SQL语句有没有缺少标点
PHP_Reader 2018-07-24
  • 打赏
  • 举报
回复
引用 1 楼 Roock 的回复:
应该要加 try/catch 吧?


改成下面了,虽然程序没有崩溃,但是还是报 Unalbe to open the database file

public static int ExecuteNonQuery(string sql, params SQLiteParameter[] param)
{
try
{
using (SQLiteConnection con = new SQLiteConnection(str))
{
using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
con.Open();
if (param != null)
{
cmd.Parameters.AddRange(param);
}
return cmd.ExecuteNonQuery();
}
}
}
catch (SQLiteException se)
{
//捕获异常
//断点试了下,还是报了那个:Unalbe to open the database file
Console.WriteLine(se.Message + " \n\n" + se.Source + "\n\n" + se.StackTrace + "\n\n" + se.Data);
return 0;
}
}
PHP_Reader 2018-07-24
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
你是不是 查询之后,没有关闭 connection


都用了 using
以为为 SQLiteHelper.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data.SQLite;
using System.Data;


namespace ThreeFloors.DAL
{
public class SqliteHelper
{
//连接字符串
private static readonly string str = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;

/// <summary>
/// 增删改
/// 20180723
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="param">sql参数</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string sql, params SQLiteParameter[] param)
{
try
{
using (SQLiteConnection con = new SQLiteConnection(str))
{
using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
con.Open();
if (param != null)
{
cmd.Parameters.AddRange(param);
}
return cmd.ExecuteNonQuery();
}
}
}
catch (SQLiteException se)
{
//捕获异常
//断点试了下,还是报了那个:Unalbe to open the database file
Console.WriteLine(se.Message + " \n\n" + se.Source + "\n\n" + se.StackTrace + "\n\n" + se.Data);
return 0;
}
}

/// <summary>
/// 查询
/// 20180723
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="param">sql参数</param>
/// <returns>首行首列</returns>
public static object ExecuteScalar(string sql, params SQLiteParameter[] param)
{
using(SQLiteConnection con = new SQLiteConnection(str))
{
using(SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
con.Open();
if (param != null)
{
cmd.Parameters.AddRange(param);
}

return cmd.ExecuteScalar();
}
}
}

/// <summary>
/// 多行查询
/// 20180723
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="param">sql参数</param>
/// <returns>SQLiteDateReader</returns>
public static SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[] param)
{
using (SQLiteConnection con = new SQLiteConnection(str))
{
using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
{
if (param != null)
{
cmd.Parameters.AddRange(param);
}
try
{
con.Open();
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
con.Close();
con.Dispose();
throw ex;
}
}
}

}

/// <summary>
/// 查询多行数据
/// 20180723
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="param">sql参数</param>
/// <returns>一个表</returns>
public static DataTable ExecuteTable(string sql, params SQLiteParameter[] param)
{
DataTable dt = new DataTable();
using (SQLiteDataAdapter sda = new SQLiteDataAdapter(sql, str))
{
if (param != null)
{
sda.SelectCommand.Parameters.AddRange(param);
}
sda.Fill(dt);
}
return dt;
}




}
}



Roock 2018-07-24
  • 打赏
  • 举报
回复
参考一下下面的代码:

public static bool CreateBook(Book book)
{
try
{
SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;");
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "INSERT INTO Book(ID, BookName, Price, Rowguid) VALUES(@ID1, @BookName1, @Price1, @Rowguid1)";
cmd.Parameters.Add(new SQLiteParameter("ID1", book.ID));
cmd.Parameters.Add(new SQLiteParameter("BookName1", book.BookName));
cmd.Parameters.Add(new SQLiteParameter("Price1", book.Price));
cmd.Parameters.Add(new SQLiteParameter("Rowguid1", book.Rowguid));

int i = cmd.ExecuteNonQuery();
return i == 1;
}
catch (SQLiteException se)
{
MessageBox.Show(se.Message + " \n\n" + se.Source + "\n\n" + se.StackTrace + "\n\n" + se.Data);
return false;
}
catch (ArgumentException ae)
{
MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace + "\n\n" + ae.Data);
return false;
}
catch (Exception ex)
{
//Do any logging operation here if necessary
MessageBox.Show(ex.Message + "\n\n" + ex.Source + "\n\n" + ex.StackTrace + "\n\n" + ex.Data);
return false;
}
}
正怒月神 2018-07-24
  • 打赏
  • 举报
回复
你是不是 查询之后,没有关闭 connection
Roock 2018-07-24
  • 打赏
  • 举报
回复
应该要加 try/catch 吧?
PHP_Reader 2018-07-24
  • 打赏
  • 举报
回复
问题解决了,主要由于Window Defender的问题



点击添加允许


在此还是多谢各位的帮助!!!
PHP_Reader 2018-07-24
  • 打赏
  • 举报
回复
引用 10 楼 hanjun0612 的回复:
[quote=引用 9 楼 qq_22805437 的回复:]
[quote=引用 8 楼 hanjun0612 的回复:]
异常时,点击查看详情,看一下具体错误


执行查询语句没有报错,可以正常获取数据,这里是执行Update语句,就报错:找不大数据库文件?



[/quote]
那你这个可能是文件的权限问题了。可以读但是没有写的权限。
增加everyone角色,然后赋值所有权限,试试看[/quote]

bin/debug/下的cater.db文件添加如下权限,还是报一样的错

正怒月神 2018-07-24
  • 打赏
  • 举报
回复
引用 9 楼 qq_22805437 的回复:
[quote=引用 8 楼 hanjun0612 的回复:]
异常时,点击查看详情,看一下具体错误


执行查询语句没有报错,可以正常获取数据,这里是执行Update语句,就报错:找不大数据库文件?



[/quote]
那你这个可能是文件的权限问题了。可以读但是没有写的权限。
增加everyone角色,然后赋值所有权限,试试看
PHP_Reader 2018-07-24
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
异常时,点击查看详情,看一下具体错误


执行查询语句没有报错,可以正常获取数据,这里是执行Update语句,就报错:找不大数据库文件?



正怒月神 2018-07-24
  • 打赏
  • 举报
回复
异常时,点击查看详情,看一下具体错误

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧