2017-08-15 112 views
1

在我提出这个问题之前,我只想说我已经经历了很多其他类似的问题,但他们并没有帮助,这就是为什么我决定问我的。使用c#和asp.net将图像下载到SQL Server数据库

好的,所以我试图上传一个选定的图像到数据库,当单击上传按钮,前端是用ASP.NET编写的,后端用C#编写的。

这是我的代码:

if (FileUpload1.HasFile) 
{ 
    SqlConnection con = new SqlConnection("i put my connection string here"); 
    con.Open(); 

    int length = FileUpload1.PostedFile.ContentLength; 
    byte[] pic = new byte[length]; 

    FileUpload1.PostedFile.InputStream.Read(pic, 0, length); 

    SqlCommand com = new SqlCommand("insert into LogHelp (file) values (@image)", con); 
    com.Parameters.AddWithValue("@image", pic); 

    com.ExecuteNonQuery(); 

    con.close(); 
} 

现在我使用Visual Studio 2015年的网络形式。当我运行上面的代码时,它会引发此错误:

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

Additional information: Incorrect syntax near the keyword 'file'.

请问这是什么意思?如果你有另一种方式可以用来完成同样的任务,那么请大家全神贯注。

+1

尝试将您的语句重写为LogHelp([file])值(@image)“ - FILE可能是一个关键字 - 您应该避免将列命名为关键字,但是在无法更改的情况下,将它们包围方括号 –

+0

'插入LogHelp“+”(文件)值(@image)'你需要在LogHelp之后留出空白,另外为什么你在这里有字符串连接,只需要把它写成一个字符串。我正在投票关闭它,因为打字错误 – mybirthname

+0

真的吗?我从来不知道RDBMS在'insert into table(column)'时抱怨...'(在我的SQLS2012上进行的一个快速测试显示它不介意 - 你认为这个版本是什么版本?) –

回答

2

因为我已经测试了我提出我的意见的假设:

您需要环绕你file用方括号 - 文件是SQLServer的一个关键字

insert into LogHelp([file]) values(@image) 

我与其他不同意评论者;我认为我没有使用过的数据库系统需要在表名的末尾和列出要插入的列的开头括号之间留有空格。我这样做,但是他的观察一致认为没有必要写SQL作为串接两个字符串("INSERT..."+" values...")在你的代码虽然

考虑不渐入AddWithValue习惯,对于设置在这里的原因:https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

+0

以及那实际上是问题,一旦我把方括号它完美地工作。非常感谢@CaiusJard –

+0

我会采纳你的建议,并停止使用AddwithValue了很多。谢谢。 –

相关问题