Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将图像插入数据库时出错_C#_Asp.net - Fatal编程技术网

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);