C# 将图像插入数据库时出错
我在将图像插入数据库时出错。 下面给出的代码是我试图插入图像,但无法正确执行的代码C# 将图像插入数据库时出错,c#,asp.net,C#,Asp.net,我在将图像插入数据库时出错。 下面给出的代码是我试图插入图像,但无法正确执行的代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; public partial class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
public partial class welcome : System.Web.UI.Page
{
string fname;
SqlConnection con = new SqlConnection();
string emailname;
protected void Page_Load(object sender, EventArgs e)
{
if ((Session["Username"] == null) && (Session["useraddress"] == null))
{
Response.Redirect("Registration.aspx");
}
else
{
emailname = Session["useremail"].ToString();
Label2.Text = Session["Username"].ToString();
Label3.Text = Session["useraddress"].ToString();
welcomelbl.Text = Session["Username"].ToString();
addlbl.Text = Session["useraddress"].ToString();
}
}
protected void Button1_Click1(object sender, EventArgs e)
{
Session.Clear();
Response.Redirect("login.aspx");
}
protected void Button1_Click(object sender, EventArgs e)
{
imageupload();
}
下面给出了我用来上传图像的函数
private void imageupload()
{
int imglength = FileUpload2.PostedFile.ContentLength;
byte[] bytearray = new byte[imglength];
fname = FileUpload2.PostedFile.FileName;
TextBox1.Text = fname;
HttpPostedFile image = FileUpload2.PostedFile;
image.InputStream.Read(bytearray, 0, imglength);
SqlConnection con = Connection.conn();
con.Open();
SqlCommand cmd = new SqlCommand("insert into imgtbl (imgname,img,useraddress) values(@name ,@image '" + emailname + "')", con);
cmd.Parameters.AddWithValue("@name", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.AddWithValue("@image", SqlDbType.Image).Value = bytearray;
cmd.ExecuteNonQuery();
con.Close();
}
}
以下错误(您在@image
和包含emailname
的字符串之间缺少逗号):
应该是:
SqlCommand cmd = new SqlCommand("insert into imgtbl (imgname,img,useraddress) values(@name ,@image, '" + emailname + "')", con); // Note the missing comma!
另外,通过参数化查询,您也可以正确地开始,为什么不设置电子邮件地址呢?这是用户输入,因此参数化确实是避免SQL注入所必须做的事情
SqlCommand cmd = new SqlCommand("insert into imgtbl (imgname,img,useraddress) values(@name ,@image, @emailname)", con);
cmd.Parameters.AddWithValue("@name", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.AddWithValue("@image", SqlDbType.Image).Value = bytearray;
cmd.Parameters.AddWithValue("@emailname", SqlDbType.VarChar).Value = emailname;
另一件事:你想让国际用户使用你的网站吗?然后,您应该真正地从
VARCHAR
切换到NVARCHAR
,以允许名称中使用unicode字符。将数据传递到SQL server时,您应该始终尝试使用参数,而不是手动构建带有串联的SQL命令
而不是:
SqlCommand cmd = new SqlCommand("insert into imgtbl (imgname,img,useraddress) values(@name ,@image '" + emailname + "')", con);
您还应该参数化电子邮件名称,就像您对@name
和@image
所做的那样:
string sqlCommand = "INSERT INTO imgtbl (imgname, img, useraddress) VALUES (@name, @image, @emailName)";
SqlCommand cmd = new SqlCommand(sqlCommand, con);
cmd.Parameters.AddWithValue("@name", TextBox1.Text);
cmd.Parameters.AddWithValue("@image", bytearray);
cmd.Parameters.AddWithValue("@emailname", emailname);
这将防止向数据库发送任何格式错误的sql命令,但最重要的是,它将使您的调用更加安全。否则,您将面临SQL注入攻击
更新:查看@ThorstenDittmar response,缺少的逗号可能导致语法错误请更正您的
查询
SqlCommand cmd = new SqlCommand("insert into imgtbl (imgname,img,useraddress) values(@name ,@image '" + emailname + "')", con);
应该是这样的
SqlCommand cmd = new SqlCommand("INSERT INTO imgtbl (imgname, img, useraddress) VALUES (@name, @image, '" + emailname + "')", con);
您在查询中遗漏了
comma
。请格式化您的问题,指定错误消息以及您在代码中遇到错误的确切位置。为什么您不使用与imgname
相同的方法添加useraddress
,img
“我的代码有错误”不是一个足够详细的错误报告。我的错误是“附近有语法错误xyz@gmail.com”“听到了吗xyz@gmail.com是我们要在imgtb中插入的+emailname+Table@user3230665该语法错误没有导致您检查SQL语法?感谢您帮助mei希望与会话用户上载图像,因此听说我们使用emailname作为会话值没有问题-适当的“谢谢”“是向上投票和/或接受答案。@user3230665我实际上不知道你的第二条评论是什么意思,但我仍然觉得你应该使用NVARCHAR
而不是VARCHAR
和参数化查询,而不是字符串串联。以防您试图捍卫这两个设计决策:-),因为您总是应该使用参数化查询。没有例外,没有借口。@ThorstenDittmar:+1表示您的NVARCHARobservation@ThorstenDittmar-刚刚注意到在OP问题中;你的眼睛很好:)
SqlCommand cmd = new SqlCommand("INSERT INTO imgtbl (imgname, img, useraddress) VALUES (@name, @image, '" + emailname + "')", con);