LoginSignup
2
2

More than 5 years have passed since last update.

MSSQLのデータサイズをLINQで求めてみた

Posted at

完璧に網羅はしていませんが・・・。

this
            lbFieldCount.Text = dt.Rows.OfType<DataRow>().Sum( c =>
            {
                int iDec = 0;
                int.TryParse( c["Size"].ToString(), out iDec );
                switch( c["Type"].ToString() ) {
                    case "bigint":      return 8;
                    case "int":         return 4;
                    case "smallmoney":  return 2;
                    case "tinyint":     return 1;
                    case "numeric":
                    case "decimal":
                        if( iDec >=  1 && iDec <=  9 )  return  5;
                        if( iDec >= 10 && iDec <= 19 )  return  9;
                        if( iDec >= 20 && iDec <= 28 )  return 13;
                        if( iDec >= 29 && iDec <= 38 )  return 17;
                        break;
                    case "bit":         return 1;
                    case "smallint":    return 4;
                    case "money":       return 8;

                    case "float":
                        if( iDec >=  1 && iDec <= 24 )  return 4;
                        if( iDec >= 25 && iDec <= 53 )  return 8;
                            break;
                    case "real":        return 4;
                    case "date":        return 3;
                    case "datetimeoffset":
                        if( iDec >=  0 && iDec <=  2 )  return  8;
                        if( iDec >=  3 && iDec <=  4 )  return  9;
                        if( iDec >=  5 && iDec <=  7 )  return 10;
                        return 10;
                    case "datetime2":
                        if( iDec >= 0 && iDec <= 2 )    return 6;
                        if( iDec >= 3 && iDec <= 4 )    return 7;
                        return 8;
                    case "smalldatetime":               return 4;
                    case "datetime":                    return 8;
                    case "time":
                        if( iDec >=  0 && iDec <=  2 )  return  3;
                        if( iDec >=  3 && iDec <=  4 )  return  4;
                        if( iDec >=  5 && iDec <=  7 )  return  5;
                        return 5;
                    case "char":        return iDec;
                    case "varchar":     return iDec + 2;
                    case "text":        return 0;//         2147483646;
                    case "nchar":       return iDec * 2;
                    case "nvarchar":    return iDec * 2 + 2;
                    case "ntext":       return 0;//         2147483646;
                    case "binary":      return iDec;
                    case "varbinary":   return iDec + 2;
                    case "image":       return 0;//         2147483646;

                    }
                return 0;
            }).ToString();

ちなみに return 0;// 2147483646;return 2147483646; としたら落ちたのでやめました。

こんな書き方でいいんでしょうか?

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2