在帖子《MD5密码存储》中我写了一个简单的demo,把16个字节大小的一个数组连同一个字符串写入SQL Server。我们补充两个将一维和二维字节数组转换的方法: public static class Ext { public static byte[] ConvertToOneDimensional(this byte[,] array) { var length = array.GetLongLength(0) * array.GetLongLength(1); var ret = new byte[length]; var n = 0; for (var i = 0; i < array.GetLongLength(0); i++) for (var j = 0; j < array.GetLongLength(1); j++) ret[n++] = array[i, j]; return ret; } public static byte[,] ConvertToTwoDimensional(this byte[] array, int xlength, int ylength) { var ret = new byte[xlength, ylength]; var i = 0; var j = 0; for (var n = 0; n < array.Length; n++) { ret[i, j++] = array[n]; if (j >= ylength) { i++; j = 0; } } return ret; } } 这样你就可以先将二维数组转换为一维数组,然后写入SQL Server表中。取出时,做相反的转换。
拼成SQL是最简单的一个..
搞成DataSet批量导入也是一个办法..
using( SqlConnection conn = new SqlConnection( connectionString ) ) {
conn.Open();
using( SqlBulkCopy sbc = new SqlBulkCopy( conn ) ) {
sbc.DestinationTableName = "您的表名"; for( int i = 0 ; i < original.Tables[ 0 ].Columns.Count ; i++ ) {
sbc.ColumnMappings.Add( original.Tables[ 0 ].Columns[ i ].ColumnName, original.Tables[ 0 ].Columns[ i ].ColumnName );
}
sbc.WriteToServer( original.Tables[ 0 ] );
}
}
{
public static byte[] ConvertToOneDimensional(this byte[,] array)
{
var length = array.GetLongLength(0) * array.GetLongLength(1);
var ret = new byte[length];
var n = 0;
for (var i = 0; i < array.GetLongLength(0); i++)
for (var j = 0; j < array.GetLongLength(1); j++)
ret[n++] = array[i, j];
return ret;
} public static byte[,] ConvertToTwoDimensional(this byte[] array, int xlength, int ylength)
{
var ret = new byte[xlength, ylength];
var i = 0;
var j = 0;
for (var n = 0; n < array.Length; n++)
{
ret[i, j++] = array[n];
if (j >= ylength)
{
i++;
j = 0;
}
}
return ret;
} }
这样你就可以先将二维数组转换为一维数组,然后写入SQL Server表中。取出时,做相反的转换。
var output = ((byte[])rd["MD5"]).ConvertToTwoDimensional(3,4);