我以前問過這個問題here,我不確定我是否有完全相同的問題,相關的問題或不同的問題,但我會問無論如何。必須聲明標量變量或是其他東西
我得到的
誤差必須聲明標量變量 「@ID」
我有一個全局字符串變量...
string picLoc;
我有一個插入方法看起來像這樣...
cmd.CommandText = "INSERT into VolunteersMainDetails(ID , " +
"Name, Photo)" +
"VALUES(@ID, " +
"@Name, @Photo)";
cmd.Parameters.AddWithValue("@ID", txtID.Text);
cmd.Parameters.AddWithValue("@Name", txtName.Text);
FileStream fs = new FileStream(@picLoc, FileMode.Open, FileAccess.Read);
byte[] imgByteArr = new byte[fs.Length];
fs.Read(imgByteArr, 0, Convert.ToInt32(fs.Length));
fs.Close();
cmd.Parameters.Add(new SqlParameter("Photo", imgByteArr));
cmd.Parameters.Clear();
cmd.Parameters.Add("@Photo", SqlDbType.VarBinary, -1);
cmd.Parameters["@Photo"].Value = DBNull.Value;
我不知道,如果明確參數的問題,如果是那麼如果刪除代碼,我會得到的錯誤...
變量名「@Photo」已聲明。變量名稱在查詢批處理或存儲過程中必須是唯一的。
我相信我已經在參數中使用了@Photo三次,如果我不使用清除參數。
如果clear參數不是問題,那麼照片代碼的問題是什麼?或插入和價值代碼格式?
下面的方法是打開對話框查找圖像...
private void brwsphoto_Click(object sender, RoutedEventArgs e)
{
try
{
FileDialog fldlg = new OpenFileDialog();
fldlg.InitialDirectory = Environment.SpecialFolder.MyPictures.ToString();
fldlg.Filter = "Image File (*.jpg;*.bmp;*.gif)|*.jpg;*.bmp;*.gif";
fldlg.ShowDialog();
{
picLoc = fldlg.FileName;
ImageSourceConverter isc = new ImageSourceConverter();
image1.SetValue(Image.SourceProperty,isc.ConvertFromString(picLoc));
}
fldlg = null;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
在此先感謝如果有人能幫助我嗎?
更新1A
@Habib
我已經修改插入方法,你建議作爲...
cmd.Parameters.Add(new SqlParameter("VPhoto", imgByteArr)); // removed this code
cmd.Parameters.Clear(); // removed this code
cmd.Parameters.Add("@Photo", SqlDbType.VarBinary, -1); // this code included
cmd.Parameters["@Photo"].Value = DBNull.Value; // this code included
所以,現在我收到以下錯誤
從數據類型nvarchar到varbinary(max)的隱式轉換不是允許。使用CONVERT函數來運行此查詢。
解
解決辦法是我改變從VARBINARY(max)數據類型到圖像。這似乎解決了這個問題。我不知道如何使用varbinary(max)來存儲影像,目前我也不會爲此煩惱。
我已更新,並且出現新錯誤。你能幫助我嗎?在此先感謝 – bucketblast
@bucketblast,請嘗試'cmd.Parameters.AddWithValue(「@ Photo」,DBNull.Value);' – Habib
同樣的錯誤。我不應該在add參數中引用imgByteArr – bucketblast