将 jpeg 转换为 byte[],然后插入 SQL table
Converting jpeg to byte[], then inserting into SQL table
我正在尝试将我 select 从我的磁盘中获取的 jpeg 转换为字节数组,然后将其插入到 SQL 服务器中的 table 中。我没有收到任何错误,只是没有插入记录...
我使用的网络表单允许您从下拉菜单中 select 方案代码和版本,然后从数据库中检索相应的数据并显示在网络表单上。您还可以创建新记录或更新现有记录。数据库中的字段之一是 Logo,存储在 varbinary(MAX) 中。
这是 onClick 事件,其中从驱动器 selected 的图像被复制到临时文件夹,并从那里转换为字节数组。
protected void btnSubmit_Click(object sender, EventArgs e)
{
//Div1.Visible = true;
string fileName = Path.GetFileName(logoPrvw.Value);
File.Copy(logoPrvw.Value, @"C:\TempImages\" + fileName, true);
System.Drawing.Image img = System.Drawing.Image.FromFile(@"C:\TempImages\" + fileName);
byte[] logoBytes;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
logoBytes = ms.ToArray();
}
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);
try
{
if (ddSchemeCode.SelectedIndex == 0 | ddVersion.SelectedIndex == 0)
{
DataClass.AddToData(data);
}
if (ddVersion.SelectedIndex != 0)
{
DataClass.UpdateData(data);
}
}
catch
{
Console.WriteLine("An error occured and the database was not updated.");
}
下面是包含 SQL 指令的代码...
public static TemplateData AddToData(TemplateData data)
{
string sqlAddNew = "INSERT INTO dbo.LetterTemplateCustomisation (Comment, TemplateId, Version, SchemeCode, Logo) ";
sqlAddNew += "VALUES ('" + data.Comment + "', " + data.TemplateId + ", " + data.Version + ", '" + data.SchemeCode + "'," + data.Logo + ")";
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LettersDatabase"].ConnectionString;
SqlConnection connect = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(sqlAddNew, connect);
command.CommandType = CommandType.Text;
connect.Open();
SqlDataReader dr = command.ExecuteReader();
TemplateData tempData = null;
if (dr.HasRows)
{
dr.Read();
tempData = new TemplateData(dr);
}
dr.Close();
connect.Close();
return tempData;
}
最后,大部分数据Class
public class TemplateData
{
public byte[] Logo { get; set; }
public string TemplateId { get; set; }
public string SchemeCode { get; set; }
public string Version { get; set; }
public string Comment { get; set; }
public TemplateData(string schemeCode, string version, string comment, string templateID, byte[] logo)
{
SchemeCode = schemeCode;
Version = version;
Comment = comment;
TemplateId = templateID;
Logo = logo;
}
public TemplateData(SqlDataReader dr)
{
initialiseData();
if (dr.HasRows)
{
Version = dr["Version"].ToString();
Logo = (byte[])dr["Logo"];
TemplateId = dr["TemplateId"].ToString();
Comment = dr["Comment"].ToString();
SchemeCode = dr["SchemeCode"].ToString();
}
}
我没有收到任何错误,只是记录没有出现在数据库中。喜欢,none。
如有任何建议,我们将不胜感激。
我设置了一个断点
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);
和 logoBytes 有字节,它们不会去任何地方。
请参考这个例子,它展示了如何使用参数化命令插入
https://msdn.microsoft.com/en-us/library/4f5s1we0(v=vs.110).aspx
尝试使用 sql 参数而不是串联:
string sqlAddNew = "INSERT INTO dbo.LetterTemplateCustomisation (Comment, TemplateId, Version, SchemeCode, Logo) ";
sqlAddNew += "VALUES (@comment, @templateid, @version, @schemecode,@logo)";
然后使用适当的 SQL 数据类型将参数添加到您的命令对象:
command.Parameters.Add(New SqlParameter("@comment", SqlDbType.NVarChar)).Value = data.comment
command.Parameters.Add(New SqlParameter("@templateid", SqlDbType.Int)).Value = data.templateid
...
command.Parameters.Add(New SqlParameter("@logo", SqlDbType.Binary)).Value = data.logo
这只是一个大胆的猜测,但应该排除任何串联问题,并希望让实际问题可见。
我正在尝试将我 select 从我的磁盘中获取的 jpeg 转换为字节数组,然后将其插入到 SQL 服务器中的 table 中。我没有收到任何错误,只是没有插入记录...
我使用的网络表单允许您从下拉菜单中 select 方案代码和版本,然后从数据库中检索相应的数据并显示在网络表单上。您还可以创建新记录或更新现有记录。数据库中的字段之一是 Logo,存储在 varbinary(MAX) 中。
这是 onClick 事件,其中从驱动器 selected 的图像被复制到临时文件夹,并从那里转换为字节数组。
protected void btnSubmit_Click(object sender, EventArgs e)
{
//Div1.Visible = true;
string fileName = Path.GetFileName(logoPrvw.Value);
File.Copy(logoPrvw.Value, @"C:\TempImages\" + fileName, true);
System.Drawing.Image img = System.Drawing.Image.FromFile(@"C:\TempImages\" + fileName);
byte[] logoBytes;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
logoBytes = ms.ToArray();
}
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);
try
{
if (ddSchemeCode.SelectedIndex == 0 | ddVersion.SelectedIndex == 0)
{
DataClass.AddToData(data);
}
if (ddVersion.SelectedIndex != 0)
{
DataClass.UpdateData(data);
}
}
catch
{
Console.WriteLine("An error occured and the database was not updated.");
}
下面是包含 SQL 指令的代码...
public static TemplateData AddToData(TemplateData data)
{
string sqlAddNew = "INSERT INTO dbo.LetterTemplateCustomisation (Comment, TemplateId, Version, SchemeCode, Logo) ";
sqlAddNew += "VALUES ('" + data.Comment + "', " + data.TemplateId + ", " + data.Version + ", '" + data.SchemeCode + "'," + data.Logo + ")";
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LettersDatabase"].ConnectionString;
SqlConnection connect = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(sqlAddNew, connect);
command.CommandType = CommandType.Text;
connect.Open();
SqlDataReader dr = command.ExecuteReader();
TemplateData tempData = null;
if (dr.HasRows)
{
dr.Read();
tempData = new TemplateData(dr);
}
dr.Close();
connect.Close();
return tempData;
}
最后,大部分数据Class
public class TemplateData
{
public byte[] Logo { get; set; }
public string TemplateId { get; set; }
public string SchemeCode { get; set; }
public string Version { get; set; }
public string Comment { get; set; }
public TemplateData(string schemeCode, string version, string comment, string templateID, byte[] logo)
{
SchemeCode = schemeCode;
Version = version;
Comment = comment;
TemplateId = templateID;
Logo = logo;
}
public TemplateData(SqlDataReader dr)
{
initialiseData();
if (dr.HasRows)
{
Version = dr["Version"].ToString();
Logo = (byte[])dr["Logo"];
TemplateId = dr["TemplateId"].ToString();
Comment = dr["Comment"].ToString();
SchemeCode = dr["SchemeCode"].ToString();
}
}
我没有收到任何错误,只是记录没有出现在数据库中。喜欢,none。
如有任何建议,我们将不胜感激。
我设置了一个断点
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);
和 logoBytes 有字节,它们不会去任何地方。
请参考这个例子,它展示了如何使用参数化命令插入
https://msdn.microsoft.com/en-us/library/4f5s1we0(v=vs.110).aspx
尝试使用 sql 参数而不是串联:
string sqlAddNew = "INSERT INTO dbo.LetterTemplateCustomisation (Comment, TemplateId, Version, SchemeCode, Logo) ";
sqlAddNew += "VALUES (@comment, @templateid, @version, @schemecode,@logo)";
然后使用适当的 SQL 数据类型将参数添加到您的命令对象:
command.Parameters.Add(New SqlParameter("@comment", SqlDbType.NVarChar)).Value = data.comment
command.Parameters.Add(New SqlParameter("@templateid", SqlDbType.Int)).Value = data.templateid
...
command.Parameters.Add(New SqlParameter("@logo", SqlDbType.Binary)).Value = data.logo
这只是一个大胆的猜测,但应该排除任何串联问题,并希望让实际问题可见。