C#sqlite查询结果列出<string> </string>

时间:2010-05-26 06:14:42

标签: c# sqlite

我在苦苦挣扎。我查询了我的db,它返回一列数据,我需要将其设置为List。这是我正在使用的内容,我收到有关将void转换为字符串的错误。

public static void GetImportedFileList()
    {
        using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3"))
        {
            connect.Open();
            using (SQLiteCommand fmd = connect.CreateCommand())
            {
                SQLiteCommand sqlComm = new SQLiteCommand(@"SELECT DISTINCT FileName FROM Import");
                SQLiteDataReader r = sqlComm.ExecuteReader();
                while (r.Read()) 
                {
                    string FileNames = (string)r["FileName"];

                    List<string> ImportedFiles = new List<string>();                        
                }                    

                connect.Close();
        }
    }
}

然后在申请中

List<string> ImportedFiles = GetImportedFileList() // Method that gets the list of files from the db 
foreach (string file in files.Where(fl => !ImportedFiles.Contains(fl))) 

4 个答案:

答案 0 :(得分:25)

public static List<string> GetImportedFileList(){
    List<string> ImportedFiles = new List<string>();
    using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3")){
        connect.Open();
        using (SQLiteCommand fmd = connect.CreateCommand()){
            fmd.CommandText = @"SELECT DISTINCT FileName FROM Import";
            fmd.CommandType = CommandType.Text;
            SQLiteDataReader r = fmd.ExecuteReader();
            while (r.Read()){
                ImportedFiles.Add(Convert.ToString(r["FileName"]));
            }
        }
    }
    return ImportedFiles;
}

我在代码中修改过的内容:

  • ImportedFiles放在整个方法的范围内。
  • 无需调用connect.Close();,因为连接对象包含在使用块中。
  • 使用Convert.ToString而不是(String),因为前者将处理所有数据类型转换为字符串。我遇到了这个Here

修改

您正在创建一个新的命令对象sqlComm,而不是使用由连接对象创建的fmd

答案 1 :(得分:3)

首先,您的返回类型为void。您需要返回一个List。另一个问题是你在循环中初始化列表,所以在循环的每次传递中你都有一个新列表,而且更多的是,你不在列表中添加字符串。你的代码应该更像是:

public static List<string> GetImportedFileList()
    {
        List<string> ImportedFiles = new List<string>();                        
        using (SQLiteConnection connect = new SQLiteConnection(@"Data Source=C:\Documents and Settings\js91162\Desktop\CMMData.db3"))
        {
            connect.Open();
            using (SQLiteCommand fmd = connect.CreateCommand())
            {
                fmd.CommandText = @"SELECT DISTINCT FileName FROM Import";
                SQLiteDataReader r = fmd.ExecuteReader();
                while (r.Read()) 
                {
                    string FileNames = (string)r["FileName"];

                    ImportedFiles.Add(FileNames);
                }                    

                connect.Close();
        }
    }
    return ImportedFiles;
}

答案 2 :(得分:0)

错误与您的方法的返回类型有关。您返回无效(public static void )但稍后再使用它,就像它返回List<string>一样。

我认为您打算使用以下方法签名:

public static List<string> GetImportedFileList()

答案 3 :(得分:0)

您已经有办法获得个人结果,所以对我而言,您只需要:

List<string> ImportedFiles = new List<string>();移到while循环之外。

在循环内调用ImportedFiles.Add(FileNames);(在分配该字符串之后)。

return ImportedFiles最后。

将返回类型更改为List<string>