Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 奇怪的字符串格式+;mysql中文件上传的路径名_C#_Asp.net_Mysql_Sql_Html - Fatal编程技术网

C# 奇怪的字符串格式+;mysql中文件上传的路径名

C# 奇怪的字符串格式+;mysql中文件上传的路径名,c#,asp.net,mysql,sql,html,C#,Asp.net,Mysql,Sql,Html,嘿,伙计们,我上传图片到我的项目路径时遇到了问题。图片包含在~/userdata/UserID/uploadedimage/image.jpg中 我使用下面的方法上传并在数据库中存储图片的路径 protected void UploadButton_Click(object sender, EventArgs e) { if (FileUploadControl.HasFile) { try {

嘿,伙计们,我上传图片到我的项目路径时遇到了问题。图片包含在~/userdata/UserID/uploadedimage/image.jpg中

我使用下面的方法上传并在数据库中存储图片的路径

    protected void UploadButton_Click(object sender, EventArgs e)
    {

        if (FileUploadControl.HasFile)
        {
            try
            {
                string theUserId = Session["UserID"].ToString();
                OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;");
                cn.Open();
                //string filename = Path.GetFileName(FileUploadControl.FileName);
                string fileuploadpath = Server.MapPath("~/userdata/" + theUserId + "/uploadedimage/") + Path.GetFileName(FileUploadControl.FileName);
                FileUploadControl.SaveAs(fileuploadpath);
                StatusLabel.Text = "Upload status: File uploaded!";

                OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('" + theUserId + "' , '" + fileuploadpath + "')", cn);
                cmd.ExecuteNonQuery();
            }

            catch (Exception ex)
            {
                StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;

            }

        }
    }
}
我发现路径不是我的项目目录的路径,它有点奇怪:

这是我数据库中的一个片段,第一个idPictures=1是我需要的正确路径名

idPictures=2是文件上载插入到我的数据库中的文件吗

我如何获得它,使其提供如下路径名:

~/userdata/2/uploadedimage/batman-for-facebook.jpg
编辑:

如果我尝试这样做:

string fileuploadpath = ("~/userdata/"+theUserId+"/uploadedimage/")+Path.GetFileName(FileUploadControl.FileName);
            FileUploadControl.SaveAs(fileuploadpath);
            StatusLabel.Text = "Upload status: File uploaded!";

            OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('"+theUserId+"','"+fileuploadpath+"')", cn);
            cmd.ExecuteNonQuery();
        }

        catch (Exception ex)
        {
            StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;

        }

    }
}

    }
我得到一个错误:


无法上载该文件。出现以下错误:SaveAs方法配置为需要根路径,而路径“~/userdata/1/UploadeImage/holypally.jpg”没有根路径。

我怀疑它将反斜杠视为SQL语句中的转义字符。别忘了,您正在使用
Server.MpaPath
——也就是说,您正在尝试查找文件的Windows绝对文件名

当您不使用参数化SQL语句,而是直接将用户指定的文本包含到SQL中时,就会发生这种情况不要这样做。使用参数化SQL命令,单独指定值,这样至少就不需要担心不可靠的值


当然,您仍然需要确定是否确实要存储转换后的路径,但这是另一回事。

为了回答我自己的问题,我必须创建两个字符串,一个纯粹用于文件上载,另一个纯粹用于数据库路径名存储:

        string filenameDB = Path.GetFileName(FileUploadControl.FileName);
        string fileuploadpath = Server.MapPath("~/userdata/"+theUserId+"/uploadedimage/")+Path.GetFileName(FileUploadControl.FileName);
        FileUploadControl.SaveAs(fileuploadpath);
        string fileuploadpaths = ("~/userdata/"+theUserId+"/uploadedimage/")+filenameDB;
        StatusLabel.Text = "Upload status: File uploaded!";

        OdbcCommand cmd = new OdbcCommand("INSERT INTO Pictures (UserID, picturepath) VALUES ('"+theUserId+"','"+fileuploadpaths+"')", cn);
        cmd.ExecuteNonQuery();
    }

    catch (Exception ex)
    {
        StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;

    }

}
}


呃,也许是因为idpictures 2缺少了它们,所以它的反面效果也是如此,但是为什么它不像第一张图片那样省钱呢path@Garrith:您正在调用
Server.MapPath
并将结果作为
picturepath
的值插入。你确定你了解
Server.MapPath
的功能吗?不,我不需要翻译的路径,是的,我了解参数化SQL语句,但我想先看看是否能正确获得路径名,然后再担心反链接。最初我听说MapPath是~因此我使用它,我不知道它翻译了“完整”路径这是否意味着我可以删除它并设置自己的路径名?
    }