我有一个web服务,可以在数据库中搜索存储的模板。但是,运行我的应用程序时出现错误
必须声明标量变量“@Template”。
[WebMethod]
public Verification StuVerification (byte[] Template)
{
cn.Open();
SqlCommand com = new SqlCommand("SELECT * FROM tblFingerprint WHERE Template = @Template)", cn);
SqlDataReader sr = com.ExecuteReader();
while (sr.Read())
{
Verification verification = new Verification()
{
StudentID = sr.GetInt32(0),
StudentNumber = sr.GetString(1),
Name = sr.GetString(2),
Surname = sr.GetString(3),
};
cn.Close();
return verification;
}
cn.Close();
return new Verification();
}
Verification ver = verification.StuVerification(m_VrfMin);
Verification v = new Verification();
if (ver.StudentID > 0)
{
// Verification v = new Verification();
richTextBox1.Text = v.StudentNumber;
}
else
{
richTextBox1.Text = "Verification Failed" + error;
}
答案 0 :(得分:2)
您尚未将SQL参数添加到SQLCommand:
com.Parameters.AddWithValue("@Template", TemplateObject);
答案 1 :(得分:2)
命令文本中的@Template
字符串是您应在命令参数集合中定义的参数的占位符,以及传递给数据库代码的值。
cn.Open();
SqlCommand com = new SqlCommand(@"SELECT * FROM tblFingerprint
WHERE Template = @Template", cn);
com.Parameters.AddWithValue("@Template", Template);
SqlDataReader sr = com.ExecuteReader();
它的值用于执行查询以选择查询返回的行。但是,从上面的代码中可以清楚地看出数据库表中字段Template
的数据类型是什么。因此,此代码以二进制数据类型的形式传递一个字节数组,这可能不是用于与模板字段进行比较的确切数据类型。
看到你对Image字段的评论我建议尝试使用此(未测试)
SqlParameter p = com.Parameters.Add("@Template", SqlDbType.Image);
p.Value = Template;
SqlDataReader sr = com.ExecuteReader();
这似乎是必要的,因为使用AddWithValue添加byte []类型的值会自动创建一个SqlDbType.Binary参数类型,而数据库似乎就像一个SqlDbType.Image,但是,请阅读deprecated Image field
答案 2 :(得分:0)
试试这个。添加@template的参数
SqlCommand com = new SqlCommand("SELECT * FROM tblFingerprint WHERE Template = @Template)", cn);
com.Parameters.AddWithValue("@Template", Template);