C# BLOB,插入SQL数据库
我有一个我无法修复的错误。。。我真的不知道为什么 我正在使用这个代码上传我的数据库中的文件,我想现在使用BLOBC# BLOB,插入SQL数据库,c#,asp.net,sql,blob,C#,Asp.net,Sql,Blob,我有一个我无法修复的错误。。。我真的不知道为什么 我正在使用这个代码上传我的数据库中的文件,我想现在使用BLOB if (FileUpload1.HasFile) try { //FileUpload1.SaveAs("C:\\inetpub\\wwwroot\\ClientPortalCs\\" //+ GetTheC
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秒内提供一个示例。像这样的代码只是在乞求一个简单的解决方案。请使用参数化查询。