read data from sqlite into C# then to sqlite

Reproducible Example:

sqlite db test3.s3db has one table with name "MathRec":

name score
Bill 2
Mary 3
John 3

Code:

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

namespace ConsoleApplication7

{
    class Program
    {
    static void Main(string[] args)
    {

        string fullPath = "C:\\Users\\Desktop\\dataset\\test3.s3db";
        SQLiteConnection conread = new SQLiteConnection("Data Source=" + fullPath);
        conread.Open();

        string selectSQL = "SELECT * FROM MathRec";
        SQLiteCommand selectCommand = new SQLiteCommand(selectSQL, conread);
        SQLiteDataReader dataReader = selectCommand.ExecuteReader();
        DataSet ds = new DataSet();
        DataTable dt = new DataTable("MathRec");
        dt.Load(dataReader);
        ds.Tables.Add(dt);



        // Create a table in the database to receive the information from the DataSet

        string fullPath2 = "C:\\Users\\\\Desktop\\dataset\\test4.s3db";
        SQLiteConnection conwrite = new SQLiteConnection("Data Source=" + fullPath2);
        conwrite.Open();
        SQLiteCommand cmd = new SQLiteCommand(conwrite);
        cmd.CommandText = "DROP TABLE IF EXISTS MathRec";
        cmd.ExecuteNonQuery();
        cmd.CommandText = "CREATE TABLE MathRec(name text , score integer)";
        cmd.ExecuteNonQuery();
        SQLiteDataAdapter adaptor = new SQLiteDataAdapter("SELECT * from MathRec", conwrite);
        adaptor.InsertCommand = new SQLiteCommand("INSERT INTO MathRec  VALUES(:name, :score)", conwrite);
        adaptor.InsertCommand.Parameters.Add("name", DbType.String, 0, "name");
        adaptor.InsertCommand.Parameters.Add("score", DbType.Int32, 0, "score");
        adaptor.Update(ds, "MathRec");



         }

    }
 }

Questions: Table MathRec is created in test4.s3db with column names: name and socre, but the table is empty with no records inserted.

Help is needed!

Please don't ask me why I am just copying one db to another, because I am testing one part of the code for a bigger project, where I will do calculations to the Dataset in the middle step in the future.

Thanks!


To simplify the question:

This works (use datatable and adapter to update the original sqlite table):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            string fullPath = "C:\\Users\\data\\test.db";
            SQLiteConnection conread = new SQLiteConnection("Data Source=" + fullPath);
            conread.Open();


        SQLiteDataAdapter DB = new SQLiteDataAdapter("SELECT speed, dist FROM Cars2", conread);
        DataSet DS = new DataSet();

        DB.Fill(DS, "NewCars");


        object[] rowVals = new object[2];
        rowVals[0] = 10;
        rowVals[1] = 20;
        DS.Tables["NewCars"].Rows.Add(rowVals);


        DB.InsertCommand = new SQLiteCommand("INSERT INTO Cars2 (speed, dist)  
                                 " + " VALUES (:speed,  :dist)", conread);
        DB.InsertCommand.Parameters.Add("speed", DbType.Double, 0, "speed");
        DB.InsertCommand.Parameters.Add("dist", DbType.Double, 20, "dist");
        DB.Update(DS, "NewCars");



        }
    }
}

And this works (create a new sqlite table from old one):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            string fullPath = "C:\\Users\\data\\test.db";
            SQLiteConnection conread = new SQLiteConnection("Data Source=" + fullPath);
            conread.Open();


        SQLiteCommand cmd = new SQLiteCommand(conread);
        cmd.CommandText = "DROP TABLE IF EXISTS Cars";
        cmd.ExecuteNonQuery();
        cmd.CommandText = "CREATE TABLE Cars (speed REAL , dist REAL)";
        cmd.ExecuteNonQuery();
        cmd.CommandText = "INSERT INTO Cars SELECT * from DS";
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        }
    }
}

But this one is what I wanted (use datatable and adapter to create new table in sqlite) and is not working:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;

namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            string fullPath = "C:\\Users\\data\\test.db";
            SQLiteConnection conread = new SQLiteConnection("Data Source=" + fullPath);
            conread.Open();
    SQLiteDataAdapter DB = new SQLiteDataAdapter("SELECT speed, dist FROM Cars2", conread);
    DataSet DS = new DataSet();

    DB.Fill(DS, "NewCars");


    object[] rowVals = new object[2];
    rowVals[0] = 10;
    rowVals[1] = 20;
    DS.Tables["NewCars"].Rows.Add(rowVals);


   SQLiteDataAdapter DB2 = new SQLiteDataAdapter("SELECT speed, dist FROM Cars3", conread);
    DB2.InsertCommand = new SQLiteCommand("INSERT INTO Cars3 (speed, dist)  
                        " + " VALUES (:speed,  :dist)", conread);
    DB2.InsertCommand.Parameters.Add("speed", DbType.Double, 0, "speed");
    DB2.InsertCommand.Parameters.Add("dist", DbType.Double, 20, "dist");
    DB2.Update(DS, "NewCars");


    }
}
}

Please help!!!

Answers


I found the answer!

Adapter.Update can only be used to update the original table in the database and not to save the datatable in a new one. Please refer to the thread for answers:

C# Dataset to Access DB

Cheers!


Need Your Help

Random sample from each factor levels

r sample multisampling

I have data set with two factors; Environments (4 levels), Individuals (500 in each environment) and response variable YD. As part of my analysis I have to randomly sample 100 individuals from each

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.