我有很多非常大的矩阵(有时是双精度的,但也许是其他类型的),它们的尺寸可以变化。我想将整个数组存储为varbinary(max)
我可以很好地存储记录(我认为)。但是,当我读取数据时,我不知道如何创建尺寸可变的c#数组。
SQL表如下所示:
create table test_varbinary_table(
name varchar(256) null,
vb_data varbinary(max) null
)
用于存储数据的存储过程在这里:
CREATE PROCEDURE insertData
@name varchar(256),
@data varbinary(max)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO test_varbinary_table (name, vb_data) VALUES (@name, @data);
END
C#在这里:
double[,] dblArySampleData = new double[2,3] { {7.0, 3.0, 1.3 }, {8.333, 4.1211, 8.999 } };
var result = new byte[6 * sizeof(double)];
Buffer.BlockCopy(dblArySampleData, 0, result, 0, result.Length);
try
{
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("dbo.insertData", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@name", "foo");
cmd.Parameters.AddWithValue("@data", result);
cmd.ExecuteNonQuery();
}
conn.Close();
}
textBox1.Text = "No Failure!";
} catch (Exception ex)
{
textBox1.Text = "Error: " + ex.Message;
}
所以现在,我想阅读当当的东西,但我不知道如何阅读。甚至不确定如何开始。我可以将尺寸与表格一起存储,所以这是两个新字段,例如“行”和“列数”。
但是我需要能够创建一个不知道长度的byte []数组...我想我可以先查询行和列,然后计算长度...这似乎有点钝,但是可行。但是,即使我得到了byte []数组,我也想重建一个2dim矩阵。
直觉上,我想写:
double[,] dblArySampleData = new double[rows, cols];
但是当尺寸不能为变量时,c#似乎并不喜欢。