在C#中从sqlite3检索数据的问题

时间:2017-09-08 11:03:29

标签: c# sqlite

我正在开发一个程序,这是我项目的一部分:在这段代码中,我需要从sqlite3数据库文件中接收filenametweet并将其存储到扩展属性中一份文件。所以这是代码:

using Microsoft.WindowsAPICodePack.Shell;
using System;
using System.IO;    
using System.Data.SQLite;

class Program
{
    public static void Main()
    {
        var sqName = Path.Combine(Environment.GetFolderPath("~valid path~"));
        SQLiteConnection m_dbConnection;
        m_dbConnection =
        new SQLiteConnection("Data Source="+ sqName + ";Version=3;");
        m_dbConnection.Open();
        string sql = "SELECT * FROM TweetText";
        SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
        SQLiteDataReader reader = command.ExecuteReader();
        reader.Read();
        ShellFile.FromFilePath(reader["Filename"]).Properties.System.Comment.Value = reader["Tweet"];
    }
}

当我尝试构建这个时,VS 2017表示我在ShellFile.FromFilePath(reader["Filename"]).Properties.System.Comment.Value = reader["Tweet"]上有错误,错误代码是:

CS1503参数1:无法转换为'对象'到'字符串'

但有趣的是,如果我用以下错误替换该行,它就可以工作:

Console.Write(reader["Filename"]);
Console.Write(reader["Tweet"]);

所以我的问题是,为什么C#将reader["Filename"]识别为第一个代码中的对象,同时它将reader["Filename"]识别为第二个代码中的字符串?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Console.Write有多个重载。其中一个人承认对象为参数。在内部,Console.Write将调用reader [“fieldname”]返回的对象的ToString()方法。 reader [“fieldname”]正在重新生成underling数据库类型。 c#编译器抱怨'object'与'string'之间的转换。

您可以更改

ShellFile.FromFilePath(reader["Filename"]).Properties.System.Comment.Value = reader["Tweet"];

通过

ShellFile.FromFilePath(reader["Filename"].ToString()).Properties.System.Comment.Value = reader["Tweet"].ToString();