我有网络应用程序,我需要将图像存储到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;
}
该怎么办?需要帮助。
答案 0 :(得分:2)
问题是您添加DataTable行的方式。
您应该使用:
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);
}