- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
继续我将程序输出从 CSV 转换为 SQLite 的传奇,我遇到了另一个问题。我正在获取一个文本文件,按行和逗号将其分解,并将结果放入列表中。然后我关注this有关如何使用 ADO.NET 数据集和 .NET 数据提供程序将数据插入表中的教程,因为我之前的方法没有正确创建表。
文件中的行读取器返回它读取了 134 行,这是文件中正确的行数(顺便说一句,可以找到 here ...您将受益于使用它进行测试).此外,为将数据加载到数据适配器而创建的 DataTable 对象也读取了总共 134 行。然而,当打开文件并查看其中的内容时(我一直在使用 wxSQLite+ 执行此操作),行并不全都在那里。写入的行数各不相同,但不可避免地不是 134。此外,跨行应用的数据类型也不统一。奇数行中的数据字段与我在创建表时输入的模式保持一致,但偶数行将所有整数类型的行转换为 double 。我不太清楚是什么原因造成的,和教程的代码有点偏差,但原理应该还是一样的。这可能是一些简单而愚蠢的事情(我很擅长犯这些错误),但我的博士生导师看不出实现有任何明显的错误。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace C_Sharp_SQLite_Testbed{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window{
private static string fileName;
private static string dataName;
public static string[] lines;
public MainWindow(){
InitializeComponent();
}
private void btnLoad_Click(object sender, RoutedEventArgs e){
//open input file
string dateTime = DateTime.Today.ToString("dd_mm_yyyy");
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Document";
dlg.DefaultExt = ".txt";
dlg.Filter = "Text Documents (.txt)|*.txt";
Nullable<bool> result = dlg.ShowDialog();
string inputFilePath = dlg.FileName;
if (result == true){
//check for input in the table name textbox
if(txtTableName.GetLineLength(0) == 0){
string errorBoxText = "Please enter a name for the table.";
string caption = "Error";
MessageBox.Show(errorBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
//create save dialog box for .db file
//create output file
Microsoft.Win32.SaveFileDialog sdg = new Microsoft.Win32.SaveFileDialog();
sdg.FileName = "databaseName";
sdg.DefaultExt = ".db";
sdg.Filter = "SQLite3 Database File (.db)|*.db";
Nullable<bool> saveResult = sdg.ShowDialog();
if (saveResult == true){
string saveFileName = sdg.FileName;
string cs = string.Format("URI=file:{0}", saveFileName);
string tableName = txtTableName.Text;
int i = 0;
#region SQLite logic
#region create table
using (SQLiteConnection con = new SQLiteConnection(cs)){
con.Open();
using (SQLiteCommand cmd = new SQLiteCommand(con)){
cmd.CommandText = string.Format(@"CREATE TABLE {0} (Timestamp INTEGER PRIMARY KEY, LeftHipState INTEGER NOT NULL, LeftHipX REAL, LeftHipY REAL, LeftHipZ REAL, LeftKneeState INTEGER NOT NULL, LeftKneeX REAL, LeftKneeY REAL, LeftKneeZ REAL, LeftAnkleState INTEGER NOT NULL, LeftAnkleX REAL, LeftAnkleY REAL, LeftAnkleZ REAL, LeftFootState INTEGER NOT NULL, LeftFootX REAL, LeftFootY REAL, LeftFootZ REAL, RightHipState INTEGER NOT NULL, RightHipX REAL, RightHipY REAL, RightHipZ REAL, RightKneeState INTEGER NOT NULL, RightKneeX REAL, RightKneeY REAL, RightKneeZ REAL, RightAnkleState INTEGER NOT NULL, RightAnkleX REAL, RightAnkleY REAL, RightAnkleZ REAL, RightFootState INTEGER NOT NULL, RightFootX REAL, RightFootY REAL, RightFootZ REAL, LeftKneeFlexion REAL, LeftKneeValgus REAL, RightKneeFlexion REAL, RightKneeValgus REAL)",
txtTableName.Text);
Console.WriteLine(cmd.CommandText);
cmd.ExecuteNonQuery();
}
con.Close();
}
#endregion
using (SQLiteConnection con = new SQLiteConnection(cs)){
DataTable table = new DataTable(tableName);
#region create columns
table.Columns.Add("Timestamp", System.Type.GetType("System.String"));
//------------------------------------------------------------------
table.Columns.Add("LeftHipState", System.Type.GetType("System.Int32"));
table.Columns.Add("LeftHipX", System.Type.GetType("System.Double"));
table.Columns.Add("LeftHipY", System.Type.GetType("System.Double"));
table.Columns.Add("LeftHipZ", System.Type.GetType("System.Double"));
table.Columns.Add("LeftKneeState", System.Type.GetType("System.Int32"));
table.Columns.Add("LeftKneeX", System.Type.GetType("System.Double"));
table.Columns.Add("LeftKneeY", System.Type.GetType("System.Double"));
table.Columns.Add("LeftKneeZ", System.Type.GetType("System.Double"));
table.Columns.Add("LeftAnkleState", System.Type.GetType("System.Int32"));
table.Columns.Add("LeftAnkleX", System.Type.GetType("System.Double"));
table.Columns.Add("LeftAnkleY", System.Type.GetType("System.Double"));
table.Columns.Add("LeftAnkleZ", System.Type.GetType("System.Double"));
table.Columns.Add("LeftFootState", System.Type.GetType("System.Int32"));
table.Columns.Add("LeftFootX", System.Type.GetType("System.Double"));
table.Columns.Add("LeftFootY", System.Type.GetType("System.Double"));
table.Columns.Add("LeftFootZ", System.Type.GetType("System.Double"));
//-------------------------------------------------------------------
table.Columns.Add("RightHipState", System.Type.GetType("System.Int32"));
table.Columns.Add("RightHipX", System.Type.GetType("System.Double"));
table.Columns.Add("RightHipY", System.Type.GetType("System.Double"));
table.Columns.Add("RightHipZ", System.Type.GetType("System.Double"));
table.Columns.Add("RightKneeState", System.Type.GetType("System.Int32"));
table.Columns.Add("RightKneeX", System.Type.GetType("System.Double"));
table.Columns.Add("RightKneeY", System.Type.GetType("System.Double"));
table.Columns.Add("RightKneeZ", System.Type.GetType("System.Double"));
table.Columns.Add("RightAnkleState", System.Type.GetType("System.Int32"));
table.Columns.Add("RightAnkleX", System.Type.GetType("System.Double"));
table.Columns.Add("RightAnkleY", System.Type.GetType("System.Double"));
table.Columns.Add("RightAnkleZ", System.Type.GetType("System.Double"));
table.Columns.Add("RightFootState", System.Type.GetType("System.Int32"));
table.Columns.Add("RightFootX", System.Type.GetType("System.Double"));
table.Columns.Add("RightFootY", System.Type.GetType("System.Double"));
table.Columns.Add("RightFootZ", System.Type.GetType("System.Double"));
//-------------------------------------------------------------------
table.Columns.Add("LeftKneeFlexion", System.Type.GetType("System.Double"));
table.Columns.Add("LeftKneeValgus", System.Type.GetType("System.Double"));
table.Columns.Add("RightKneeFlexion", System.Type.GetType("System.Double"));
table.Columns.Add("RightKneeValgus", System.Type.GetType("System.Double"));
#endregion
var output = new List<MyData>();
foreach (var line in File.ReadAllLines(inputFilePath)){
output.Add(new MyData(line.Split(',')));
}
foreach (MyData outputLine in output){
DataRow row = table.NewRow();
row["Timestamp"] = outputLine.Time;
row["LeftHipState"] = outputLine.HlState;
row["LeftHipX"] = outputLine.HLX;
row["LeftHipY"] = outputLine.HLY;
row["LeftHipZ"] = outputLine.HLZ;
row["LeftKneeState"] = outputLine.KlState;
row["LeftKneeX"] = outputLine.KLX;
row["LeftKneeY"] = outputLine.KLY;
row["LeftKneeZ"] = outputLine.KLZ;
row["LeftAnkleState"] = outputLine.AlState;
row["LeftAnkleX"] = outputLine.ALX;
row["LeftAnkleY"] = outputLine.ALY;
row["LeftAnkleZ"] = outputLine.ALZ;
row["LeftFootState"] = outputLine.FlState;
row["LeftFootX"] = outputLine.FLX;
row["LeftFootY"] = outputLine.FLY;
row["LeftFootZ"] = outputLine.FLZ;
row["RightHipState"] = outputLine.HrState;
row["RightHipX"] = outputLine.HRX;
row["RightHipY"] = outputLine.HRY;
row["RightHipZ"] = outputLine.HRZ;
row["RightKneeState"] = outputLine.KrState;
row["RightKneeX"] = outputLine.KRX;
row["RightKneeY"] = outputLine.KRY;
row["RightKneeZ"] = outputLine.KRZ;
row["RightAnkleState"] = outputLine.ArState;
row["RightAnkleX"] = outputLine.ARX;
row["RightAnkleY"] = outputLine.ARY;
row["RightAnkleZ"] = outputLine.ARZ;
row["RightFootState"] = outputLine.FrState;
row["RightFootX"] = outputLine.FRX;
row["RightFootY"] = outputLine.FRY;
row["RightFootZ"] = outputLine.FRZ;
row["LeftKneeFlexion"] = outputLine.LKFX;
row["LeftKneeValgus"] = outputLine.LKVG;
row["RightKneeFlexion"] = outputLine.RKFX;
row["RightKneeValgus"] = outputLine.RKVG;
table.Rows.Add(row);
i++;
Console.WriteLine("{0}| {1} {2:N4} {3:N4} {4:N4}| {5} {6:N4} {7:N4} {8:N4}| {9} {10:N4} {11:N4} {12:N4}| {13} {14:N4} {15:N4} {16:N4}| {17} {18:N4} {19:N4} {20:N4}| {21} {22:N4} {23:N4} {24:N4}| {25} {26:N4} {27:N4} {28:N4}| {29} {30:N4} {31:N4} {32:N4}| {33:N2} {34:N2} {35:N2} {36:N2}\n",
outputLine.Time, outputLine.HlState, outputLine.HLX, outputLine.HLY, outputLine.HLZ, outputLine.KlState, outputLine.KLX, outputLine.KLY, outputLine.KLZ, outputLine.AlState, outputLine.ALX, outputLine.ALY, outputLine.ALZ, outputLine.FlState, outputLine.FLX, outputLine.FLY, outputLine.FLZ, outputLine.HrState, outputLine.HRX, outputLine.HRY, outputLine.HRZ, outputLine.KrState, outputLine.KRX, outputLine.KRY, outputLine.KRZ, outputLine.ArState, outputLine.ARX, outputLine.ARY, outputLine.ARZ, outputLine.FrState, outputLine.FRX, outputLine.FRY, outputLine.FRZ, outputLine.LKFX, outputLine.LKVG, outputLine.RKFX, outputLine.RKVG);
}
Console.WriteLine("{0}, {1}", i, table.Rows.Count);
string sql = string.Format("SELECT * FROM {0}", tableName);
using (SQLiteDataAdapter da = new SQLiteDataAdapter(sql, con)){
using (new SQLiteCommandBuilder(da)){
da.Update(table);
}
}
con.Close();
#endregion
}
}
#region
//for input file
//fileName = dlg.FileName;
//OutputConsole.Text = " ";
//OutputConsole.Text = fileName;
//for output file
//dataName = sdg.FileName;
#endregion
}
}
private void btnExit_Click(object sender, RoutedEventArgs e){
Environment.Exit(0);
}
private void btnInfo_Click(object sender, RoutedEventArgs e){
Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir");
DirectoryInfo info = new DirectoryInfo(".");
lock (info){
OutputConsole.Text = String.Format("Directory info: " + info.FullName);
}
}
}
public class MyData{
public MyData(string[] values){
Time = int.Parse(values[0]);
HlState = int.Parse(values[1]);
HLX = double.Parse(values[2]);
HLY = double.Parse(values[3]);
HLZ = double.Parse(values[4]);
KlState = int.Parse(values[5]);
KLX = double.Parse(values[6]);
KLY = double.Parse(values[7]);
KLZ = double.Parse(values[8]);
AlState = int.Parse(values[9]);
ALX = double.Parse(values[10]);
ALY = double.Parse(values[11]);
ALZ = double.Parse(values[12]);
FlState = int.Parse(values[13]);
FLX = double.Parse(values[14]);
FLY = double.Parse(values[15]);
FLZ = double.Parse(values[16]);
HrState = int.Parse(values[17]);
HRX = double.Parse(values[18]);
HRY = double.Parse(values[19]);
HRZ = double.Parse(values[20]);
KrState = int.Parse(values[21]);
KRX = double.Parse(values[22]);
KRY = double.Parse(values[23]);
KRZ = double.Parse(values[24]);
ArState = int.Parse(values[25]);
ARX = double.Parse(values[26]);
ARY = double.Parse(values[27]);
ARZ = double.Parse(values[28]);
FrState = int.Parse(values[29]);
FRX = double.Parse(values[30]);
FRY = double.Parse(values[31]);
FRZ = double.Parse(values[32]);
LKFX = double.Parse(values[33]);
LKVG = double.Parse(values[34]);
RKFX = double.Parse(values[35]);
RKVG = double.Parse(values[36]);
}
public int Time { get; set; }
public int HlState { get; set; }
public double HLX { get; set; }
public double HLY { get; set; }
public double HLZ { get; set; }
public int KlState { get; set; }
public double KLX { get; set; }
public double KLY { get; set; }
public double KLZ { get; set; }
public int AlState { get; set; }
public double ALX { get; set; }
public double ALY { get; set; }
public double ALZ { get; set; }
public int FlState { get; set; }
public double FLX { get; set; }
public double FLY { get; set; }
public double FLZ { get; set; }
public int HrState { get; set; }
public double HRX { get; set; }
public double HRY { get; set; }
public double HRZ { get; set; }
public int KrState { get; set; }
public double KRX { get; set; }
public double KRY { get; set; }
public double KRZ { get; set; }
public int ArState { get; set; }
public double ARX { get; set; }
public double ARY { get; set; }
public double ARZ { get; set; }
public int FrState { get; set; }
public double FRX { get; set; }
public double FRY { get; set; }
public double FRZ { get; set; }
public double LKFX { get; set; }
public double LKVG { get; set; }
public double RKFX { get; set; }
public double RKVG { get; set; }
}
}
它是微妙的,还是实际上是错误的?我需要解决行数问题和数据类型转换问题。
这是 MainWindow
的 XAML 代码,因此您不必重现它:
<Window x:Class="C_Sharp_SQLite_Testbed.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Background="LightGray">
<Button x:Name="btnLoad" Content="Load CSV File to Database" HorizontalAlignment="Left" Margin="10,258,0,0" VerticalAlignment="Top" Width="153" Click="btnLoad_Click"/>
<Button x:Name="btnExit" Content="Exit" HorizontalAlignment="Left" Margin="312,258,0,0" VerticalAlignment="Top" Width="75" Click="btnExit_Click"/>
<TextBlock x:Name="OutputConsole" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Height="243" Width="497" Background="Black" Foreground="#FF00E800" FontFamily="Lucida Console"/>
<Button x:Name="btnInfo" Content="Directory Information" HorizontalAlignment="Left" Margin="168,258,0,0" VerticalAlignment="Top" Width="139" Click="btnInfo_Click"/>
<TextBox x:Name="txtTableName" HorizontalAlignment="Left" Height="23" Margin="200,285,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120"/>
<Label Content="Enter name for table in database:" HorizontalAlignment="Left" Margin="10,282,0,0" VerticalAlignment="Top"/>
</Grid>
</Window>
项目类型是控制台项目,因此您需要在打开一个新的 WPF 项目后进行设置。
也许还有一个愚蠢的问题:写完这些文件后我等待打开其中一个文件的时间是否重要?
最佳答案
因为这里发布的代码是正确的,所以行数较少的问题是在插入完成之前退出应用程序。
整数显示为小数的问题是由于用于查看 SQLite 文件的工具,而不是实际数据库本身。
关于c# - SQLite/ADO.NET - 数据适配器没有将正确的行数写入 SQLite 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16903614/
我有这个代码 var myChart = new FusionCharts("../themes/clean/charts/hbullet.swf", "myChartId", "400", "75
既然写入是立即进行的(复制到内核缓冲区并返回),那么使用 io_submit 进行写入有什么好处? 事实上,它 (aio/io_submit) 看起来更糟,因为您必须在堆上分配写入缓冲区并且不能使用基
我正在使用 mootool 的 Request.JSON 从 Twitter 检索推文。收到它后,我将写入目标 div 的 .innerHTML 属性。当我在本地将其作为文件进行测试时,即 file:
最终,我想将 Vertica DB 中的数据抓取到 Spark 中,训练机器学习模型,进行预测,并将这些预测存储到另一个 Vertica DB 中。 当前的问题是确定流程最后部分的瓶颈:将 Spark
我使用 WEKA 库编写了一个 Java 程序, 训练分类算法 使用经过训练的算法对未标记的数据集运行预测 将结果写入 .csv 文件 问题在于它当前写出离散分类结果(即算法猜测一行属于哪个类别)。我
背景 - 我正在考虑使用 clickonce 通过 clickonce(通过网站)部署 WinForms 应用程序。相对简单的应用程序的要素是: - 它是一个可执行文件和一个数据库文件(sqlite)
是否有更好的解决方案来快速初始化 C 数组(在堆上创建)?就像我们使用大括号一样 double** matrix_multiply(const double **l_matrix, const dou
我正在读取 JSON 文件,取出值并进行一些更改。 基本上我向数组添加了一些值。之后我想将其写回到文件中。当我将 JSONArray 写回文件时,会被写入字符串而不是 JSONArray 对象。怎样才
我为两个应用程序使用嵌入式数据库,其中一个是服务器,另一个是客户端。客户端应用程序。可以向服务器端发送获取数据请求以检索数据并显示在表格(或其他)中。问题是这样的:如何将获取的数据保存(写入)到页面文
是否有更好的解决方案来快速初始化 C 数组(在堆上创建)?就像我们使用大括号一样 double** matrix_multiply(const double **l_matrix, const dou
从问题得出问题:找到所有 result = new ArrayList(); for (int i = 2; i >(i%8) & 0x1) == 0) { result.add(i
由于某种原因,它没有写入 CSV。谁能明白为什么它不写吗? def main(): list_of_emails = read_email_csv() #read input file, cr
关闭。 这个问题是 not reproducible or was caused by typos 。它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能在这里出现,
我目前正在开发一个保存和加载程序,但我无法获得正确的结果。 编写程序: #include #include #define FILENAME "Save" #define COUNT 6 type
import java.io.*; public class Main2 { public static void main(String[] args) throws Exception {
我需要使用预定义位置字符串“Office”从所有日历中检索所有 iOS 事件,然后将结果写入 NSLog 和 UITextView。 到目前为止,这是我的代码: #import "ViewCo
我正在尝试将 BOOL 值写入 PFInstallation 中的列,但会不停地崩溃: - (IBAction)pushSwitch:(id)sender { NSUserDefaults *push
我以前在学校学过一些简单的数据库编程,但现在我正在尝试学习最佳实践,因为我正在编写更复杂的应用程序。写入 MySQL 数据库并不难,但我想知道让分布式应用程序写入 Amazon EC2 上的远程数据库
是否可以写回到ResourceBundle?目前我正在使用 ResourceBundle 来存储信息,在运行时使用以下内容读取信息 while(ResourceBundle.getBundle("bu
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!