我正在开发一个程序,这是我项目的一部分:在这段代码中,我需要从sqlite3数据库文件中接收filename
和tweet
并将其存储到扩展属性中一份文件。所以这是代码:
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"]
识别为第二个代码中的字符串?我该如何解决这个问题?
答案 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();