我正在尝试将我从磁盘中选择的jpeg转换为字节数组,然后将其插入SQL Server中的表中。我没有收到任何错误,记录只是没有插入...
我正在使用一个允许您从下拉菜单中选择Scheme代码和版本的webform,然后从数据库中检索相应的数据并显示在webform上。您还可以创建新记录或更新现有记录。数据库中的一个字段是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有字节,它们不会去任何地方。
答案 0 :(得分:1)
请参考此示例,它显示如何使用参数化命令
进行插入https://msdn.microsoft.com/en-us/library/4f5s1we0(v=vs.110).aspx
答案 1 :(得分:0)
尝试使用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
这只是一个疯狂的猜测,但应该排除任何连接问题,并希望能够使实际问题可见。