-1

嗨,我有 Web 应用程序,我需要将图像存储到 datatble 的一列中,但是这样做时出现错误。这是我为此尝试的代码。

DataTable dt = new DataTable();

dt.Columns.Add("Companyaddress", typeof(System.String));
dt.Columns.Add("CompEmail", typeof(System.String));
dt.Columns.Add("CompTelephone", typeof(System.String));
dt.Columns.Add("logoname", typeof(byte[]));
//dt.Columns.Add("logoname", typeof(System.Byte[]));

for (int rowNumber = 0; rowNumber < imageDataSet.Tables[0].Rows.Count; rowNumber++)
{
    imageDataSet.Tables[0].Rows[rowNumber]["logoname"] = GetByteArray("abc.jpg");
    dt.Rows.Add(imageDataSet.Tables[0].Rows[rowNumber][0].ToString(), 
                imageDataSet.Tables[0].Rows[rowNumber][1].ToString(), 
                imageDataSet.Tables[0].Rows[rowNumber][2].ToString(), 
                imageDataSet.Tables[0].Rows[rowNumber][3].ToString());
 }

得到错误

值的类型与列类型不匹配无法存储在 logoname 列中。预期类型为 Byte[]。

在这条线上

dt.Rows.Add(imageDataSet.Tables[0].Rows[rowNumber][0].ToString(), imageDataSet.Tables[0].Rows[rowNumber][1].ToString(), imageDataSet.Tables[0].Rows[rowNumber][2].ToString(), imageDataSet.Tables[0].Rows[rowNumber][3].ToString());

这是我调用以获取图像的功能

private byte[] GetByteArray(String strFileName)
{
    System.IO.FileStream fs = new System.IO.FileStream(strFileName, System.IO.FileMode.Open);
    // initialise the binary reader from file streamobject
    System.IO.BinaryReader br = new System.IO.BinaryReader(fs);
    // define the byte array of filelength

    byte[] imgbyte = new byte[fs.Length + 1];
    // read the bytes from the binary reader

    imgbyte = br.ReadBytes(Convert.ToInt32((fs.Length)));
    // add the image in bytearray

    br.Close();
    // close the binary reader

    fs.Close();
    // close the file stream
    return imgbyte;
}

该怎么办?需要帮忙。

4

1 回答 1

2

问题是您添加数据表行的方式。

你应该使用:

dt.Rows.Add(imageDataSet.Tables[0].Rows[rowNumber][0].ToString(),
    imageDataSet.Tables[0].Rows[rowNumber][1].ToString(), 
    imageDataSet.Tables[0].Rows[rowNumber][2].ToString(), 
    imageDataSet.Tables[0].Rows[rowNumber][3] as byte[]);

由于您的第 3 列对应于字节数组字段,您可以将其转换为byte[]类型。之前您正在使用.ToString该方法,而该方法需要一个byte[]类型参数。因此例外。

为清楚起见,您可以使用DataTable.NewRow将循环重写为:

for (int rowNumber = 0; rowNumber < imageDataSet.Tables[0].Rows.Count; rowNumber++)
{
    imageDataSet.Tables[0].Rows[rowNumber]["logoname"] = GetByteArray("abc.jpg");
    DataRow dr = dt.NewRow();
    dr["Companyaddress"] = imageDataSet.Tables[0].Rows[rowNumber][0].ToString();
    dr["CompEmail"] = imageDataSet.Tables[0].Rows[rowNumber][1].ToString();
    dr["CompTelephone"] = imageDataSet.Tables[0].Rows[rowNumber][2].ToString();
    dr["logoname"] = imageDataSet.Tables[0].Rows[rowNumber][3] as byte[];
    dt.Rows.Add(dr);
}
于 2012-10-31T10:02:19.647 回答