我所发生的是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指令或者装配参考?)
答案 0 :(得分:1)
好好解决这个问题:
result_table.FillSchema(database, SchemaType.Source,cols);
看起来你想要这个变量数据集而不是数据库:
result_table.FillSchema(datase, SchemaType.Source,cols);
答案 1 :(得分:0)
DataTable.Columns
和DataTable.Rows
不是通用集合。它们分别是DataColumnCollection
和DataRowCollection
类型。这些是早于.NET 2.0的集合类型;在.NET 2.0中的泛型之前,您必须为任何强类型集合创建特定的类。
要获得与LINQ方法兼容的内容,请执行以下操作之一:
dataset.Tables[0].Columns.OfType<DataColumn>()
dataset.Tables[0].Columns.Cast<DataColumn>()
不同之处在于,OfType
只会获得可以转换为该类型的项目,并丢弃其余项目,而Cast
将期望该集合仅包含 可以转换为该类型的项目,如果遇到不可能的项目,则会抛出异常。