【问题标题】:SQLite not functioning well c#SQLite 无法正常运行 c#
【发布时间】:2019-02-22 05:16:48
【问题描述】:
using System;
using System.Collections.Generic;
using Microsoft.Data.Sqlite;

namespace DataAccessLibrary
{
    public static class DataAccess
    {
        public static void InitializeDatabase()
        {
            using (SqliteConnection db =
                new SqliteConnection("Filename=Crab.db"))
            {
                db.Open();
                String tableCommand = "create table if not exists MyTable (Crab integer primary key AutoIncrement," + " Box varchar(20)," + " Data varchar(20)," + "Data1 varchar(20)," + " Data2 varchar(20)," + "Data3 varchar(20)," + " Data4 varchar(20)," + " Data5 varchar(20))";
                SqliteCommand createTable = new SqliteCommand(tableCommand, db);
                createTable.ExecuteReader();
            }
        }

        public static void AddData(string inputText,string inputText1,string inputText2)
        {
            using (SqliteConnection db =
                new SqliteConnection("Filename=Crab.db"))
            {
                db.Open();
                SqliteCommand insertCommand = new SqliteCommand();
                insertCommand.Connection = db;
                insertCommand.CommandText = "insert into MyTable (Data,Data1,Data2) values (@Data,@Data1,@Data2)";            
                insertCommand.Parameters.AddWithValue("@Data", inputText);
                insertCommand.Parameters.AddWithValue("@Data1", inputText1);
                insertCommand.Parameters.AddWithValue("@Data2", inputText2);
                insertCommand.ExecuteReader();
                db.Close();
            }
        }

        public static void Add(string inputText3,string inputText4,string inputText5)
        {
            using (SqliteConnection db =
                new SqliteConnection("Filename=Crab.db"))
            {
                db.Open();
                SqliteCommand insertCommand = new SqliteCommand();
                insertCommand.Connection = db;
                insertCommand.CommandText = "insert into MyTable (Data3,Data4,Data5) values (@Data3,@Data4,@Data5)";
                insertCommand.Parameters.AddWithValue("@Data3", inputText3);
                insertCommand.Parameters.AddWithValue("@Data4", inputText4);
                insertCommand.Parameters.AddWithValue("@Data5", inputText5);
                insertCommand.ExecuteReader();
                db.Close();
            }
        }

        public static List<String> GetData()
        {
            List<String> entries = new List<string>();
            using (SqliteConnection db =
                new SqliteConnection("Filename=Crab.db"))
            {
                db.Open();
                SqliteCommand selectCommand = new SqliteCommand
                  ("select Crab from MyTable", db);
                selectCommand = new SqliteCommand
                   ("select Box from MyTable", db);
                selectCommand = new SqliteCommand
                   ("select Data from MyTable", db);
                selectCommand = new SqliteCommand              
                    ("select Data1 from MyTable", db);
                selectCommand = new SqliteCommand
                    ("select Data2 from MyTable", db);
                selectCommand = new SqliteCommand
                    ("select Data3 from MyTable", db);
                selectCommand = new SqliteCommand
                    ("select Data4 from MyTable", db);
                selectCommand = new SqliteCommand
                    ("select Data5 from MyTable", db);
                SqliteDataReader query = selectCommand.ExecuteReader();
                while (query.Read())
                {
                    entries.Add(query.GetString(0));
                }

                db.Close();
            }

            return entries;
        }
    }
}

我可以知道为什么以这种方式插入数据吗?我试图让它在一行中有 6 条记录。请帮忙!有没有办法让它填满第一行而不是新行?

<Page
    x:Class="UWPDataTest.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWPDataTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <StackPanel>
        <TextBox x:Name="Data3" Text="" VerticalAlignment="Top" Width="1300"/>
        <TextBox x:Name="Data4" Text="" VerticalAlignment="Top" Width="1300"/>
        <TextBox x:Name="Data5" Text="" VerticalAlignment="Top" Width="1300"/>
            <Button x:Name="button" Content="Done" Click="Add" HorizontalAlignment="Left" Margin="694,190,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.684,0.293"/>
        </StackPanel>
    </Grid>

</Page>

这是设计的布局。总共有 2 页,tb 名称为 Data - Data5。

【问题讨论】:

  • 我不明白你的问题。代码完全按照它所说的去做 - Add 只插入第 3-5 列,而 AddData 只插入第 0-2 列 - 每个插入都是一个新行
  • 好吧,您正在执行两个单独的INSERT 语句。每个INSERT 都会在您的表中创建一条新记录。将它们组合成一个语句。
  • @MartinZikmund 您好,感谢您的及时回复!请问我怎样才能让它更新3-5?抱歉,我是 c# 和 sqlite 的新手。
  • @Pierre-LoupPagnez ^!感谢您的及时回复!我可以知道我能做什么吗?
  • 检查 SQL 中的 UPDATE 关键字,就是这样做的 :-)

标签: c# sqlite uwp


【解决方案1】:

每次执行命令时,它都会创建一个新行,您会在 2 个单独的方法中执行 2 次,这就是创建 2 行的原因,因此如果您需要 1 行中的所有文本框数据,则必须一起执行它们只有一种方法,如下所示。

public static void AddData(string inputText,string inputText1,string inputText2,string inputText3,string inputText4,string inputText5)
{
    using (SqliteConnection db =
        new SqliteConnection("Filename=Crab.db"))
    {
        db.Open();
        SqliteCommand insertCommand = new SqliteCommand();
        insertCommand.Connection = db;
        insertCommand.CommandText = "insert into MyTable (Data,Data1,Data2,Data3,Data4,Data5) values (@Data,@Data1,@Data2,@Data3,@Data4,@Data5)";            
        insertCommand.Parameters.AddWithValue("@Data", inputText);
        insertCommand.Parameters.AddWithValue("@Data1", inputText1);
        insertCommand.Parameters.AddWithValue("@Data2", inputText2);
        insertCommand.Parameters.AddWithValue("@Data3", inputText3);
        insertCommand.Parameters.AddWithValue("@Data4", inputText4);
        insertCommand.Parameters.AddWithValue("@Data5", inputText5);
        insertCommand.ExecuteReader();
        db.Close();
    }
}

你只需要这个 AddData 方法,你可以删除 Add 方法,因为它只是一个额外的方法。

【讨论】:

  • 感谢您的及时回复!这实际上有帮助!但我还添加了一个带有 if else 条件的按钮,以确保两侧条目填写同一行!谢谢你们的努力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2015-12-08
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多