C# 必须声明标量变量还是其他变量
我以前问过这个问题,我不确定我是否有完全相同的问题,相关的问题或不同的问题,但我还是会问 我犯了一个错误 必须声明标量变量“@ID” 我有一个全局字符串变量C# 必须声明标量变量还是其他变量,c#,sql-server,wpf,visual-studio-2010,sql-server-2008,C#,Sql Server,Wpf,Visual Studio 2010,Sql Server 2008,我以前问过这个问题,我不确定我是否有完全相同的问题,相关的问题或不同的问题,但我还是会问 我犯了一个错误 必须声明标量变量“@ID” 我有一个全局字符串变量 string picLoc; 我有一个insert方法,看起来像这样 cmd.CommandText = "INSERT into VolunteersMainDetails(ID , " + "Name, Photo)" + "VALUES(@ID, " +
string picLoc;
我有一个insert方法,看起来像这样
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参数不是问题,那么photo代码是否有问题?还是插入和值代码格式
下面的方法是打开对话框查找图像
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
@哈比卜
我已经按照您的建议修改了插入方法
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)更改为image。这似乎解决了问题。我不知道如何使用varbinary(max)来存储图像,目前我也不担心它 问题是由于线路:
cmd.Parameters.Clear();
添加参数后,您将清除这些参数,对于参数@Name
,您将得到相同的错误
我不太清楚为什么要在行中添加Photo
参数:
cmd.Parameters.Add(new SqlParameter("Photo", imgByteArr));
您只需注释掉以下行:
cmd.Parameters.Add(new SqlParameter("Photo", imgByteArr));
cmd.Parameters.Clear();
您的代码应该足够好了解决方案是将数据类型从varbinary(max)更改为image。这似乎解决了问题。我不知道如何使用varbinary(max)来存储图像 我已更新,并收到一个新错误。你也能帮我吗?谢谢你advance@bucketblast,尝试使用cmd.Parameters.AddWithValue(“@Photo”,DBNull.Value)代码>相同的错误。我不应该在add参数中引用imgByteArr