准确设置MySqlCommand参数大小

时间:2014-01-31 17:31:54

标签: c# mysql .net .net-4.0 mysql-connector

如何准确地将正确的数据大小传递到以下行:

objCmd.Parameters.Add(_PNs[i], _DTs[i]).Value = _PVs[i];

它传递了一个ParameterNames, MySqlDbTypes数组,但是,我希望能够传递数据大小...根据传入的MySqlDbType。

我知道text,varchar等...长度会有所不同,但其他一切呢?

P.S。 C#使用最新版本的MySQL,以及最新版本的MySql .Net COnnector

这是我到目前为止所拥有的,但它似乎并不像我认为的那样准确。

objCmd.Parameters.Add(_PNs[i], _DTs[i], _EstimatedSize(_PVs[i])).Value = _PVs[i];

// this method is pretty dumb but we want it to be fast.
internal int _EstimatedSize(object _val)
{
    if (_val == null || _val == DBNull.Value)
        return 4; // size of NULL
    if (_val is byte[])
        return (_val as byte[]).Length;
    if (_val is string)
        return (_val as string).Length * 4; // account for UTF-8
    if (_val is decimal || _val is float)
        return 64;
    if (_val is bool)
        return 1;
    return 32;
}

1 个答案:

答案 0 :(得分:1)

创建两个数组sqlDType和sqlSize

SqlDbType[] sqlDType = new SqlDbType[] {SqlDbType.Int, SqlDbType.Float, SqlDbType.SmallInt, SqlDbType.TinyInt};
int[] sqlSize = new int[] { 4, 8, 2, 1 };
SqlDbType type = SqlDbType.Float;
int iIndex = Array.IndexOf(sqlDType, type);
int iSize = -1;
if (iIndex > -1)
    iSize = sqlSize[iIndex];