_爱吃鱼的猫 2023-04-17 10:06 采纳率: 40%
浏览 65
已结题

C#SQLite#的查询数据问题,如何解决?

C#SQLite数据库如何查询表中是否已经存在这条数据?为什么我插入数据时,总是会报指定的值转换无效?查了所有数据类型和值都是没问题,只有未明显指示出id(主键)的值

SQLiteCommand cmd = new SQLiteCommand("CREATE TABLE IF NOT EXISTS My_table " +
                "(id INTEGER PRIMARY KEY NOT NULL, Volatage varchar(50) DEFAULT NULL," +
                "Load float DEFAULT NULL, Name varchar(50) DEFAULT NULL, " +
                "Min float DEFAULT NULL, Measure float DEFAULT NULL, Max float DEFAULT NULL, " +
                "Result varchar(50) DEFAULT NULL " +
                ")", conn);
            MessageBox.Show(Convert.ToString(Convert.ToInt32(cmd.ExecuteNonQuery())));

            SQLiteCommand sql = new SQLiteCommand($"select * from My_table where id = {id}", conn);
            MessageBox.Show(Convert.ToString(Convert.ToInt32(sql.ExecuteNonQuery())));

            if (Convert.ToInt32(sql.ExecuteNonQuery()) == 0)
            {
                SQLiteCommand sql2 = new SQLiteCommand($"update My_table set Volatage = '{volatage}',Load = {load}, Name = '{name}', Min = {min}, Measure = {measure}, Max ={max}, Result = '{result}' where id = '{id}'", conn);
                sql2.ExecuteNonQuery();
            }
            else
            {
                SQLiteCommand sql1 = new SQLiteCommand($"insert into My_table(Volatage,Load,Name,Min,Measure,Max,Result) Values('" + volatage + "'," + load + " ,'" + name + " '," + min + ", " + measure + ", " + max + ", '" + result + "')", conn);
                sql1.ExecuteNonQuery();
            }


  • 写回答

6条回答 默认 最新

  • 极客智能体-在线 2023-04-17 12:55
    关注

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    在SQLite中查询表中是否已经存在这条数据,你可以使用以下代码片段:

    SQLiteCommand cmd = new SQLiteCommand($"SELECT COUNT(*) FROM My_table WHERE id = '{id}'", conn);
    int count = Convert.ToInt32(cmd.ExecuteScalar());
    if (count > 0)
    {
        // 数据已存在
    }
    else
    {
        // 数据不存在
    }
    

    这里使用了 SELECT COUNT(*) 来获得符合条件的数据行数,如果返回的不是0,则表明数据已存在。

    至于你提到的报错问题,我猜测可能是因为你使用了字符串来插入整型主键字段。修改代码如下:

    if (count > 0)
    {
        // 更新数据
        SQLiteCommand sql2 = new SQLiteCommand($"UPDATE My_table SET Volatage = '{volatage}', Load = {load}, Name = '{name}', Min = {min}, Measure = {measure}, Max ={max}, Result = '{result}' WHERE id = {id}", conn);
        sql2.ExecuteNonQuery();
    }
    else
    {
        // 插入数据
        SQLiteCommand sql1 = new SQLiteCommand($"INSERT INTO My_table (id, Volatage, Load, Name, Min, Measure, Max, Result) VALUES ({id}, '{volatage}', {load}, '{name}', {min}, {measure}, {max}, '{result}')", conn);
        sql1.ExecuteNonQuery();
    }
    

    首先,将更新和插入操作中的id字段也加进去,其中更新操作中的id使用了整型不带引号的形式。在插入操作中,你需要为id、load和min这些字段指定具体的数据类型和值。
    如果我的回答解决了您的问题,请采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 修改了问题 4月17日
  • 创建了问题 4月17日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装