Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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# BLOB,插入SQL数据库_C#_Asp.net_Sql_Blob - Fatal编程技术网

C# BLOB,插入SQL数据库

C# BLOB,插入SQL数据库,c#,asp.net,sql,blob,C#,Asp.net,Sql,Blob,我有一个我无法修复的错误。。。我真的不知道为什么 我正在使用这个代码上传我的数据库中的文件,我想现在使用BLOB if (FileUpload1.HasFile) try { //FileUpload1.SaveAs("C:\\inetpub\\wwwroot\\ClientPortalCs\\" //+ GetTheC

我有一个我无法修复的错误。。。我真的不知道为什么

我正在使用这个代码上传我的数据库中的文件,我想现在使用BLOB

if (FileUpload1.HasFile)
                    try
                    {

                        //FileUpload1.SaveAs("C:\\inetpub\\wwwroot\\ClientPortalCs\\"
                        //+ GetTheCurrentDirectory(MyTreeView.SelectedNode)
                        //+ "\\" + FileUpload1.FileName);
                        //LabelFile.Text = "File name: " +
                        //FileUpload1.PostedFile.FileName + "<br>" +
                        //FileUpload1.PostedFile.ContentLength + " kb<br>" +
                        //"Content type: " + FileUpload1.PostedFile.ContentType;

                        dbConnection.Open();
                        dynamic queryString = ("INSERT INTO Files (Name,Path,UserUpload,Date,Data) VALUES ('"
                        + FileUpload1.FileName + "','" + GetTheCurrentDirectory(MyTreeView.SelectedNode) + "','" + Request.Cookies["UserSettings"]["UserName"] + "','" + DateTime.Now + "','" + FileUpload1.FileBytes + "' );"
                        + "SELECT CAST(scope_identity() AS int)");

                        SqlCommand theCommand1 = new SqlCommand(queryString, dbConnection);

                        int newFid = (Int32)theCommand1.ExecuteScalar();

                        dynamic queryStringFolder = ("INSERT INTO FILES_FOLDERS (Folder_Id,File_Id) VALUES ('"
                        + MyTreeView.SelectedValue + "'," + "'" + newFid + "')");
                        theCommand1 = new SqlCommand(queryStringFolder, dbConnection);

                        theCommand1.ExecuteNonQuery();

                        dbConnection.Close();

                    }
if(FileUpload1.HasFile)
尝试
{
//FileUpload1.SaveAs(“C:\\inetpub\\wwwroot\\ClientPortalCs\\”
//+获取当前目录(MyTreeView.SelectedNode)
//+“\\”+FileUpload1.FileName);
//LabelFile.Text=“文件名:”+
//FileUpload1.PostedFile.FileName+“
”+ //FileUpload1.PostedFile.ContentLength+“kb
”+ //“内容类型:”+FileUpload1.PostedFile.ContentType; dbConnection.Open(); 动态查询字符串=(“插入到文件(名称、路径、用户上载、日期、数据)值(” +FileUpload1.FileName+“,”+GetTheCurrentDirectory(MyTreeView.SelectedNode)+“,”+Request.Cookies[“UserSettings”][“UserName”]+“,“+DateTime.Now+”,“+FileUpload1.FileBytes+”) +“选择强制转换(scope_identity()为int)”; SqlCommand theCommand1=新的SqlCommand(queryString,dbConnection); int newFid=(Int32)命令1.ExecuteScalar(); dynamic queryStringFolder=(“插入到文件\u文件夹(文件夹\u Id,文件\u Id)”值(” +MyTreeView.SelectedValue+”、“+”、“+newFid+”)”; command1=newsqlcommand(queryStringFolder,dbConnection); 命令1.ExecuteOnQuery(); dbConnection.Close(); }
在我的数据库中,表文件中的字段数据是varbinary(max)。 查询中数据字段的参数是我尝试上载的文件的字节

发生的错误是: “错误-不允许从数据类型varchar隐式转换为VARBINAL(max)。请使用CONVERT函数运行此查询。”

有人能告诉我为什么吗


多谢各位

我认为问题在于,您将图像的字节[]作为字符串传递,因为您将其括在单引号中

删除此处的单引号:

'" + FileUpload1.FileBytes + "'"
还有一个建议:在查询中使用参数。您将避免sql注入攻击,您的查询可能会运行得更快,并且您将在将来消除此类错误

更新-使用参数:

string queryString = "INSERT INTO Files (Name,Path,UserUpload,Date,Data) VALUES (@Name,@Path,@UserUpload,@Date,@Data)";
SqlCommand theCommand1 = new SqlCommand(queryString, dbConnection);
theCommand1.Parameters.AddWithValue("@Name",FileUpload1.FileName);
theCommand1.Parameters.AddWithValue("@Path",GetTheCurrentDirectory(MyTreeView.SelectedNode));
theCommand1.Parameters.AddWithValue("@UserUpload",Request.Cookies["UserSettings"]["UserName"]);
theCommand1.Parameters.AddWithValue("@Data",FileUpload1.FileBytes);
theCommand1.Parameters.AddWithValue("@Date",DateTime.Now);

int newFid = (Int32)theCommand1.ExecuteScalar();

好的,完成了!但是为什么我现在会犯这个错误呢?错误:对象或列名丢失或为空。对于SELECT INTO语句,请验证每个列都有名称。对于其他语句,请查找空别名。不允许使用定义为“”或[]的别名。将别名更改为有效名称。“”附近的语法不正确。@Emged您现在的语法不正确。打印要发送到sql Server的sql语句并查看其外观。是。。在文件(名称、路径、用户上传、日期、数据)中插入值('WSB-BOXE 20.jpg'、'Projects//TEST/'、'Admin'、'10/28/2011 12:41:16 PM',System.Byte[]);选择CAST(scope_identity()为int)它看起来不太好..我应该可以看到数字而不是System.Byte[],对吗?@Emged我看到了。。。您可以像这样在内联sql中传递字节数组。改用参数。将在5秒内提供一个示例。像这样的代码只是在乞求一个简单的解决方案。请使用参数化查询。