C# 如何在c中使用datatable获得数据库列的大小
我想在C中使用datatable获得表中任何列的最大大小。示例是,若数据库中有一个名为dept的表,其属性为NAME和ADDRESS,我将NAME的大小设置为varchar50,ADDRESS设置为varchar30 现在我想得到50分和30分 我已经写了这个代码C# 如何在c中使用datatable获得数据库列的大小,c#,database,C#,Database,我想在C中使用datatable获得表中任何列的最大大小。示例是,若数据库中有一个名为dept的表,其属性为NAME和ADDRESS,我将NAME的大小设置为varchar50,ADDRESS设置为varchar30 现在我想得到50分和30分 我已经写了这个代码 DataSet ds1 = new DataSet(); DataSet ds = new DataSet(); string query = Form1.query1Pass; SqlCom
DataSet ds1 = new DataSet();
DataSet ds = new DataSet();
string query = Form1.query1Pass;
SqlCommand cmd = new SqlCommand(query.ToString(), con);
this.tablename1 = query.Substring(query.LastIndexOf("from")+4); ;
cmd.ExecuteNonQuery();
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(this.ds);
string query2 = Form1.query2Pass;
cmd = new SqlCommand(query2, con);
adp = new SqlDataAdapter(cmd);
adp.Fill(this.ds1);
StringBuilder datatype2 = new StringBuilder();
this.datatype2.Append("Data Type Conflict: ");
this.datetimeCon.Append("DateTime Format Conflict: ");
DataTable table1 = this.ds.Tables[0];
DataTable table2 = this.ds1.Tables[0]; ;
DataColumnCollection col1 = table1.Columns;
DataColumnCollection col2 = table2.Columns;
foreach (DataColumn ds in col1) {
foreach (DataColumn ds2 in col2) {
if (ds.ColumnName.Equals(ds2.ColumnName)) {
if (!ds.DataType.Equals(ds2.DataType)) {
this.datatype2.Append(ds.ColumnName + "<" + ds.DataType + ">, " + ds2.ColumnName + "<" + ds2.DataType + ">,");
}
else
if (ds.MaxLength!=ds2.MaxLength) {
maxLength.Append(ds.ColumnName+"<"+ds.MaxLength+">, "+ds2.ColumnName+"<"+ds2.MaxLength+">,");
}
}
}
}
我假设这些列不是文本列。仅在数据类型为字符串的列上设置: 对于非文本列,将忽略MaxLength属性。A. 如果将MaxLength指定给 非字符串列 顺便说一下,您可能希望使用LINQ方法,但这是一个品味问题:
var t1Cols = table1.Columns.Cast<DataColumn>();
var t2Cols = table2.Columns.Cast<DataColumn>();
var diffTypes =
from t1Col in t1Cols
join t2Col in t2Cols on t1Col.ColumnName equals t2Col.ColumnName
where t1Col.DataType != t2Col.DataType
select string.Format("{0}<{1}>,{2}<{3}>",
t1Col.ColumnName, t1Col.DataType, t2Col.ColumnName, t2Col.DataType);
var diffMaxLength =
from t1Col in t1Cols
join t2Col in t2Cols on t1Col.ColumnName equals t2Col.ColumnName
where t1Col.MaxLength != t2Col.MaxLength
select string.Format("{0}<{1}>,{2}<{3}>",
t1Col.ColumnName, t1Col.MaxLength, t2Col.ColumnName, t2Col.MaxLength);
Console.WriteLine("diff. Types: " + string.Join(", ", diffTypes));
Console.WriteLine("diff. max Length: " + string.Join(", ", diffMaxLength));
我假设这些列不是文本列。仅在数据类型为字符串的列上设置: 对于非文本列,将忽略MaxLength属性。A. 如果将MaxLength指定给 非字符串列 顺便说一下,您可能希望使用LINQ方法,但这是一个品味问题:
var t1Cols = table1.Columns.Cast<DataColumn>();
var t2Cols = table2.Columns.Cast<DataColumn>();
var diffTypes =
from t1Col in t1Cols
join t2Col in t2Cols on t1Col.ColumnName equals t2Col.ColumnName
where t1Col.DataType != t2Col.DataType
select string.Format("{0}<{1}>,{2}<{3}>",
t1Col.ColumnName, t1Col.DataType, t2Col.ColumnName, t2Col.DataType);
var diffMaxLength =
from t1Col in t1Cols
join t2Col in t2Cols on t1Col.ColumnName equals t2Col.ColumnName
where t1Col.MaxLength != t2Col.MaxLength
select string.Format("{0}<{1}>,{2}<{3}>",
t1Col.ColumnName, t1Col.MaxLength, t2Col.ColumnName, t2Col.MaxLength);
Console.WriteLine("diff. Types: " + string.Join(", ", diffTypes));
Console.WriteLine("diff. max Length: " + string.Join(", ", diffMaxLength));
MaxLength每次返回-1。。。这是一个问题。你能展示一下你是如何填充数据集ds和ds1的吗?MaxLength每次返回-1。。。这是一个问题。你能展示一下你是如何填充数据集ds和ds1的吗?最大长度仍然是一个问题。最大长度仍然是一个问题