2014-01-23 55 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