如何准确地将正确的数据大小传递到以下行:
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;
}
答案 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];