1

C# で datatable を使用して、テーブルの任意の列の最大サイズを取得したいと考えています。例は、dept という名前のデータベースにテーブルがあり、その属性が NAME と ADDRESS で、NAME のサイズを varchar(50) に、Address を varchar(30) に設定した場合です。

今、私は50と30を取得したい.....

私はこのコードを書いた

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+">,");
                        }

                    }
                }
            }
4

1 に答える 1

1

列は列ではないと思いTextます。MaxLengthプロパティは、を持つ列にのみ設定されますDataType=StringMSDN :

MaxLength非テキスト列の場合、プロパティは無視されます。非列ArgumentExceptionに割り当てると、例外が発生し ます。MaxLengthstring

ところで、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));
于 2012-07-06T12:18:45.140 に答える