C#dataset sql问题

时间:2009-12-08 16:52:52

标签: c#

我所发生的是ID列表(nc.txt)和列表列表(listbox1)。

我正在尝试从SQL列出与列表匹配的ID列表中的所有数据。我确定我没有正确的数据集。任何有帮助的帮助。

更新: string contents = File.ReadAllText(textBox3.Text);

            string id = id = Regex.Match(contents, @"CoreDBCaseID=(?<id>\d+)").Groups["id"].Value;
            string server = server = Regex.Match(contents, @"Server=(?<Server>[^;]+)").Groups["Server"].Value;
            string security = security = Regex.Match(contents, "Security=(?<Security>[^;]+)").Groups["Security"].Value;
            string database = database = Regex.Match(contents, "Database=(?<Database>[^\r]+)").Groups["Database"].Value;

            string[] data = new string[] {
                    string.Format("Table={0}", id),
                    string.Format("Server={0}", server),
                    string.Format("Security={0}", security),
                    string.Format("Database={0}", database),
                };
                    string sqltable = ("dbo.SLTDS_C" + id + "_Stdtable");
                    string ids = File.ReadAllLines(@"C:\nc.txt").Aggregate((f, s) => f + "," + s);
                    String cols = String.Join(",", listBox1.Items.Cast<String>().ToArray());
                    string sql = "select " + cols + " from sqltable where ([id] in (" + ids + "))";
            {
                SqlConnection con = new SqlConnection("Data Source=" + server + ";Initial Catalog=" + database + ";Integrated Security=" + security);
                con.Open();
                SqlDataAdapter tabadapter = new SqlDataAdapter(sql, con);
                DataSet dataset = new DataSet("dataset");
                tabadapter.FillSchema(dataset, SchemaType.Source,cols);
                DataTable tbltarget;
                tbltarget = dataset.Tables[cols];
                string headers = dataset.Tables[0].Columns.Aggregate((f, s) => f.Name + "," + s.Name);
                string sqldata = dataset.Tables[0].Rows.Aggregate((f, s) => f.Value + "," + s.Value);
                string output_text = tbltarget.Columns.Cast<DataColumn>().Select(col => col.ColumnName).Aggregate((current, next) => current + "|" + next) + "\r\n"
                + tbltarget.Rows.Cast<DataRow>().Select(row => row.ItemArray.Aggregate((current, next) => current.ToString() + "|" + next.ToString())).Cast<string>().Aggregate((current, next) => current + "\r\n" + next);
                {
                    File.WriteAllText(@"C:\outputtest.txt", output_text);
                }
                con.Close();
            }
        }
    }
}

错误1'System.Data.DataColumnCollection'不包含'Aggregate'的定义,并且没有扩展方法'Aggregate'接受类型'System.Data.DataColumnCollection'的第一个参数可以找到(你是否错过了使用指令或汇编参考?)
错误2'System.Data.DataRowCollection'不包含'Aggregate'的定义,并且没有扩展方法'Aggregate'接受类型'System.Data.DataRowCollection'的第一个参数可以找到(你是否缺少using指令或者装配参考?)

2 个答案:

答案 0 :(得分:1)

好好解决这个问题:

result_table.FillSchema(database, SchemaType.Source,cols);

看起来你想要这个变量数据集而不是数据库:

result_table.FillSchema(datase, SchemaType.Source,cols);

答案 1 :(得分:0)

DataTable.ColumnsDataTable.Rows不是通用集合。它们分别是DataColumnCollectionDataRowCollection类型。这些是早于.NET 2.0的集合类型;在.NET 2.0中的泛型之前,您必须为任何强类型集合创建特定的类。

要获得与LINQ方法兼容的内容,请执行以下操作之一:

dataset.Tables[0].Columns.OfType<DataColumn>()

dataset.Tables[0].Columns.Cast<DataColumn>()

不同之处在于,OfType只会获得可以转换为该类型的项目,并丢弃其余项目,而Cast将期望该集合仅包含 可以转换为该类型的项目,如果遇到不可能的项目,则会抛出异常。