必须声明标量变量

时间:2014-01-23 14:59:19

标签: c# sql-server wpf sql-server-2008

我收到此错误...

  

必须声明标量变量“@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 Server:列名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 \ Debug \ @Photo'。

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

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

更新1a

这将花费我很少的时间来掌握,所以我会离开。我将从那些帮助过的人那里得到建议。感谢

2 个答案:

答案 0 :(得分:2)

您缺少带参数

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

答案 1 :(得分:1)

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

更改为

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

还有这个

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

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