向sqlite数据库添加数据时,C#程序引发异常

向sqlite数据库添加数据时,C#程序引发异常,c#,visual-studio-2012,sqlite,sqlite-net,C#,Visual Studio 2012,Sqlite,Sqlite Net,所以我有一个项目,我正在为我的大学工作。该程序从网页(在本例中为Reddit)获取数据,并将其添加到SQlite服务器中。除了将数据插入到表中的部分外,所有操作似乎都运行顺利。代码如下: class Program { static string connString = @"Data Source=C:\SQLite\mydatabase;Version=3;"; static SQLiteConnection conn = new SQLiteConnection(

所以我有一个项目,我正在为我的大学工作。该程序从网页(在本例中为Reddit)获取数据,并将其添加到SQlite服务器中。除了将数据插入到表中的部分外,所有操作似乎都运行顺利。代码如下:

    class Program
{

    static string connString = @"Data Source=C:\SQLite\mydatabase;Version=3;";
    static SQLiteConnection conn = new SQLiteConnection(connString);
    public SQLiteDataAdapter da = new SQLiteDataAdapter();
    DataTable dt = new DataTable();



    static void Main(string[] args)
    {
        FirefoxDriver driver = new FirefoxDriver();
        driver.Navigate().GoToUrl("http://www.reddit.com/");;
        Console.WriteLine("collecting data");
        String date = DateTime.Now.ToString("M/d/yyyy");
        String title1 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[1]/div[2]/p[1]/a").Text;
        String title2 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[3]/div[2]/p[1]/a").Text;
        String title3 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[5]/div[2]/p[1]/a").Text;
        String title4 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[7]/div[2]/p[1]/a").Text;
        String title5 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[9]/div[2]/p[1]/a").Text;
        String title6 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[11]/div[2]/p[1]/a").Text;
        String title7 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[13]/div[2]/p[1]/a").Text;
        String title8 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[15]/div[2]/p[1]/a").Text;
        String title9 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[17]/div[2]/p[1]/a").Text;
        String title10 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[19]/div[2]/p[1]/a").Text;

        String user1 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[1]/div[2]/p[2]/a[1]").Text;
        String user2 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[3]/div[2]/p[2]/a[1]").Text;
        String user3 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[5]/div[2]/p[2]/a[1]").Text;
        String user4 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[7]/div[2]/p[2]/a[1]").Text;
        String user5 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[9]/div[2]/p[2]/a[1]").Text;
        String user6 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[11]/div[2]/p[2]/a[1]").Text;
        String user7 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[13]/div[2]/p[2]/a[1]").Text;
        String user8 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[15]/div[2]/p[2]/a[1]").Text;
        String user9 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[17]/div[2]/p[2]/a[1]").Text;
        String user10 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[19]/div[2]/p[2]/a[1]").Text;

        String subreddit1 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[1]/div[2]/p[2]/a[2]").Text;
        String subreddit2 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[3]/div[2]/p[2]/a[2]").Text;
        String subreddit3 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[5]/div[2]/p[2]/a[2]").Text;
        String subreddit4 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[7]/div[2]/p[2]/a[2]").Text;
        String subreddit5 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[9]/div[2]/p[2]/a[2]").Text;
        String subreddit6 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[11]/div[2]/p[2]/a[2]").Text;
        String subreddit7 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[13]/div[2]/p[2]/a[2]").Text;
        String subreddit8 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[15]/div[2]/p[2]/a[2]").Text;
        String subreddit9 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[17]/div[2]/p[2]/a[2]").Text;
        String subreddit10 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[19]/div[2]/p[2]/a[2]").Text;

        String comments1 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[1]/div[2]/ul/li[1]/a").Text;
        String comments2 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[3]/div[2]/ul/li[1]/a").Text;
        String comments3 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[5]/div[2]/ul/li[1]/a").Text;
        String comments4 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[7]/div[2]/ul/li[1]/a").Text;
        String comments5 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[9]/div[2]/ul/li[1]/a").Text;
        String comments6 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[11]/div[2]/ul/li[1]/a").Text;
        String comments7 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[13]/div[2]/ul/li[1]/a").Text;
        String comments8 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[15]/div[2]/ul/li[1]/a").Text;
        String comments9 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[17]/div[2]/ul/li[1]/a").Text;
        String comments10 = driver.FindElementByXPath("//*[@id=\"siteTable\"]/div[19]/div[2]/ul/li[1]/a").Text;


        Console.WriteLine("Data Collected. Writing to flat file");
        //driver.Close();

        //SQLiteCommand RedditPageTable = new SQLiteCommand("create table RedditPageData(ID INT, Date varchar(25), title varchar(300), user varchar(50), subreddit varchar(50), comments varchar(50));", conn);
        //conn.Open();
        //RedditPageTable.ExecuteNonQuery();
        //conn.Close();


        using (StreamWriter writer = new StreamWriter("inputstream1.txt", true) ){
            writer.WriteLine(title1 + ";" + user1 + ";" + subreddit1 + ";" + comments1 + ";" + title2 + ";" + user2 + ";" + subreddit2 + ";" + comments2 + ";" + 
                title3 + ";" + user3 + ";" + subreddit3 + ";" + comments3 + ";" + title4 + ";" + user4 + ";" + subreddit4 + ";" + comments4 + ";" + title5 + ";" + 
                user5 + ";" + subreddit5 + ";" + comments5 + ";" + title6 + ";" + user6 + ";" + subreddit6 + ";" + comments6 + ";" + user7 + ";" + title7 + ";" + 
                subreddit7 + ";" + comments7 + ";" + title8 + ";" + user8 + ";" + subreddit8 + ";" + comments8 + ";" + title9 + ";" + user9 + ";" + subreddit9 + ";" + 
                comments9 + ";" + title10 + ";" + user10 + ";" + subreddit10 + ";" + comments10);               
        }

        StringBuilder sb1 = new StringBuilder();
        using (StreamReader sr1 = new StreamReader("inputstream.txt"))
        {
            String line;
            // Read and display lines from the file until the end of 
            // the file is reached.
            while ((line = sr1.ReadLine()) != null)
            {
                sb1.AppendLine(line);
            }
        }
        string allines1 = sb1.ToString();
        int counter1 = 0;
        int ID = 0;
        string[] dataSplit1 = allines1.Split(';');
        while (true)
        {                              
            counter1 += 1;
            String titleEnter = dataSplit1[counter1];
            counter1 += 1;
            String userEnter = dataSplit1[counter1];
            counter1 += 1;
            String subredditEnter = dataSplit1[counter1];
            counter1 += 1;
            String commentsEnter = dataSplit1[counter1];
            ID++;
            Console.WriteLine(counter1);

            SQLiteCommand InsertRedditInfo = new SQLiteCommand("INSERT INTO RedditPageData(ID, Date, title, user, subreddit, comments) VALUES('"+ ID + "','" + date + "','" + titleEnter + "','" + userEnter + "','" + subredditEnter + "','" + commentsEnter + "')", conn);
            conn.Open();
            InsertRedditInfo.ExecuteNonQuery();
            conn.Close();    

            if (counter1 == 39)
            {
                break;
            }
        }



        Console.WriteLine("Data written successfully");
    }


}
以下是例外情况的详细信息:

System.Data.SQLite.SQLiteException was unhandled
  HResult=-2147467259
  Message=SQL logic error or missing database
near "s": syntax error
  Source=System.Data.SQLite
  ErrorCode=1
  StackTrace:
       at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain)
       at System.Data.SQLite.SQLiteCommand.BuildNextCommand()
       at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
       at System.Data.SQLite.SQLiteDataReader.NextResult()
       at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
       at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
       at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior)
       at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
       at ConsoleApplication5.Program.Main(String[] args) in c:\Users\Chambers\Documents\Visual Studio 2012\Projects\ConsoleApplication5\ConsoleApplication5\Program.cs:line 125
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException:     
它说可能有语法错误或缺少数据库,但我确信数据库在那里,我似乎找不到语法错误。任何一双新鲜的眼睛都会有帮助

以下是写入平面文件并添加到Sqlite服务器的字符串列表


我是第一架美国C-17救援飞机进入尼泊尔的飞行员。这就是我们带来的。;萨卡普塔斯先生/r/pics;1508条评论;索尼正式开发了21款黑色跨界跳街男装;赤热病/r/电影;625条评论;沙质海岸之王(xpost/r/Grandofftautov_PC);污染松鼠/r/游戏;173条评论;完美的回归;TuxK/r/有趣;653条评论;男子呼啦圈;三文治/r/gifs;209条评论;无人群MLB比赛中的高尔夫式播音员_tx/r/视频;645条评论;巨石堡;一个60秒的冥想工具,帮助你清理头脑/r/互联网美容;1105条评论;直到马丁·路德·金的刺客詹姆斯·厄尔·雷在一次旨在表扬演员詹姆斯·厄尔·琼斯的游行中被错误地授予荣誉。2002年1月,佛罗里达州劳德代尔市意外地创造了一块匾额,上面写着“感谢詹姆斯·厄尔·雷让梦想永存”。;西西拉/r/今天学习;656条评论;乔恩·斯图尔特(Jon Stewart)在新泽西州购买了一个农场,打算在“退休”期间为从残酷中获救的农场动物提供庇护所(r/DailyShow的x-post);环境鹰/r/电视;1220条评论;4个月大的婴儿在地震中失去父母22小时后从尼泊尔废墟中被救出;弗拉明斯库尔/r/世界新闻;390条注释

鉴于插入的数据缺少查询参数或卫生设施,最可能的罪魁祸首是在插入值时形成的错误字符串。请参阅下面的文章,了解如何将参数与SqlLiteCommand一起使用的示例


正如Ehsan所提到的,我们需要查看最终字符串,以确保这是真正的罪魁祸首。

尝试简化问题。不要插入10个用户、标题、子标题和评论,只需插入一个即可。更好的方法是,只插入一个用户,而不插入其他用户。如果可以的话,只需要做一个标题,依此类推,直到你再次遇到这个错误


然后,您将有更少的代码可以查看和检查,以找到您的bug

找到它!其中一个字符串包含一个',这将引发错误。感谢@Ron Bayer和@Travis将我推向了正确的方向。

您需要向我们展示正在编译的最终sql语句。sql语句不是问题所在,问题在于未过滤的数据被字符串连接到其中。@RonBeyer您可能是对的。在这种情况下,他可以采取的更好的方法是一次插入一行数据,并记录他插入的数据的输出。当插入失败时,是时候检查特定行并与堆栈溢出的其余部分共享它了(我试图使问题更容易调试),我认为这可能是问题所在。任务的一部分是必须从平面文件导入数据。关于如何清理它有什么想法吗?另外,字符串看起来还不错,代码通过了它在文件中解析字符串的部分,但是在第一次尝试添加第一组字符串(标题、用户、子插件、注释)时失败了!它能通过三组弦。所以我认为你说的对,它在这个组合中击中了一个坏的弦。我将发布它正在经历的字符串列表