2014-01-23 81 views
0

我得到这个错误...必须声明标量变量

必须声明标量变量“@Photo”

我插入的代码看起来是这样的......

if (image1.Source != null) 
{ 
    FileStream fs = new FileStream("@Photo", FileMode.Open, FileAccess.Read); 
    byte[] imgByteArr = new byte[fs.Length]; 
    fs.Read(imgByteArr, 0, Convert.ToInt32(fs.Length)); 
    cmd.Parameters.Add(new SqlParameter("Photo", imgByteArr)); 
} 
else 
{ 
    nonqueryCommand.Parameters.AddWithValue("@Photo", DBNull.Value); 
} 

SQL服务器:列名Photo和数据类型image

我试过this网站的例子。我修改了一点,因为该网站使用一个点击事件处理程序,因为我想使用两个点击事件处理程序。一个用于浏览按钮,另一个用于插入数据。下面的代码是在插入提手

FileStream fs = new FileStream("@Photo", FileMode.Open, FileAccess.Read); 
byte[] data = new byte[fs.Length]; 
fs.Read(data, 0, System.Convert.ToInt32(fs.Length)); 
nonqueryCommand.Parameters.AddWithValue("@Photo", data); 

上面的代码是给我的错误...

找不到文件“C:.... \ BIN \调试\ @Photo ”。

我想这给了我错误,因为我没有使用开放对话框编码相同的方法。

如果有人可以帮助我,请提前致谢。

更新1A

这将需要一点时间让我掌握,所以我会离开。我会接受那些帮助过的人的建议。由于

+0

'ntext','text'和'image'数据类型的缺失@将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前正在使用它们的应用程序。改为使用'nvarchar(max)','varchar(max)'和'varbinary(max)'。 [在此处查看详细信息](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –

+0

@marc_s - 我已在本网站上看到您提到的任何评论。建议使用varchar(max)和varbinary(max)来代替图像。所以我会谷歌,如果有例子。谢谢你让我知道 – bucketblast

+0

代替'image' - 使用'varbinary(max)'(不是'varchar(max)' - 这是文本数据) –

回答

1
nonqueryCommand.Parameters.AddWithValue("@Photo", DBNull.Value); 

变化

nonqueryCommand.Parameters.AddWithValue("Photo", DBNull.Value); 

而且也是这个

new FileStream("@Photo", FileMode.Open, FileAccess.Read); 

显然是错误的。什么是@Photo?您不能直接将SQL列绑定到C#代码。您需要从数据库中检索值,并将其存储在某个变量中,然后才能使用它。否则,这段代码只是试图找到一个名为@Photo的文件,如你所见,这会导致一个异常。

+0

@Photo是SQL Server中的列名 – bucketblast

+0

@bucketblast,这很好,但你可以'将列绑定到C#代码就像这样,你需要检索值并将它存储在某个C#变量中,以后可以使用它。正如你所看到的,它试图找到一个名为'@ Photo'的文件,这是无稽之谈。你的目的 – walther

+0

@Walter - 我宣布浏览按钮和字符串的FileStream照片全局字符串变量调用;的FileStream FS =新的FileStream(@Photo,FileMode.Open,FileAccess.Read);等等。所以新的FileStream(”。 @Photo“,我大错特错,所以感谢Walther,我还没有完全工作,但是,解决了我遇到的问题。 – bucketblast

2

您与参数

cmd.Parameters.Add(new SqlParameter("@Photo", imgByteArr)); 
           ////^^^^ here