【发布时间】:2015-08-17 12:53:03
【问题描述】:
我正在尝试将从磁盘中选择的 jpeg 转换为字节数组,然后将其插入 SQL Server 中的表中。我没有收到任何错误,只是没有插入记录...
我正在使用允许您从下拉菜单中选择方案代码和版本的网络表单,然后从数据库中检索相应的数据并显示在网络表单上。您还可以创建新记录或更新现有记录。数据库中的字段之一是 Logo,存储在 varbinary(MAX) 中。
这里是 onClick 事件,其中从驱动器中选择的图像被复制到临时文件夹,并从那里转换为字节数组。
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;
}
最后,数据类的大部分
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();
}
}
我没有收到任何错误,只是记录没有出现在数据库中。就像,没有。
任何建议将不胜感激。
我设置了一个断点
TemplateData data = new TemplateData(txtSchemeCode.Text, txtVersion.Text, txtComment.Text, txtTemplateId.Text, logoBytes);
并且 logoBytes 有字节,它们不会去任何地方。
【问题讨论】:
-
尝试使用参数而不是动态sql。行为很奇怪,但我会排除任何转换/连接/任何问题
-
先生。保罗先生,把它写进答案,我会打勾。
标签: c# sql-server database webforms type-conversion